Способ автоматического добавления базового класса LinqToSql в сущности?

Существует ли автоматический способ добавления базовых классов в сущности Linq2Sql?

Я знаю, что могу определить частичное и реализовать это, но должен быть автоматизированный способ, верно?

3 ответа

Решение

Генератор кода LINQ-to-SQL поддерживает это напрямую.

Базовый класс для контекста данных может быть установлен в конструкторе, как Base Class имущество. В качестве альтернативы, отредактируйте dbml напрямую: щелкните правой кнопкой мыши, "Edit With...", "XML Editor"

Чтобы изменить базовый класс для сущностей, установите тип:

<Database EntityBase="Some.NameSpace.Foo" ... > 

Чтобы изменить базовый класс для контекста данных, установите тип:

<Database BaseType="Some.NameSpace.Bar" ... >

В обоих случаях используйте полностью определенный тип в атрибуте. И вуаля.

Обратите внимание, что, поскольку он очень буквальный, вы также можете использовать этот подход, чтобы заставить ваши сущности реализовывать интерфейс - например, когда мои классы имеют такие свойства, как LastUpdated а также UpdatedByЯ мог бы иметь IAuditable интерфейс, который определяет их. Тогда я могу поместить код в мой контекст данных SubmitChanges (переопределить), что вызывает GetChangeSet() и устанавливает эти значения для всех IAuditable сущности обновляются; очень мило.

РЕДАКТИРОВАТЬ: ответ Марк, безусловно, правильный путь в этом случае, но я оставляю этот ответ здесь для потомков - это удобный прием, чтобы знать в некоторых случаях, когда вам нужен только частичный класс, чтобы изменить наследование / интерфейсы класса.

Я не знаю ни одного автоматизированного способа, но если вы хотите сделать это для нескольких классов и хотите указать только базовый класс, вы можете подумать о создании файла только для частичных объявлений классов. Я использую этот подход в буферах протокола, чтобы классы внутреннего представления, которые генерируются автоматически, реализовывали определенный интерфейс.

Посмотрите PartialClasses.cs для этого примера как код. (Не обращайте внимания на TODO - он исправлен локально, но я немного не нажимал:)

Некоторые люди написали свои собственные шаблоны кода вместо подхода DBML. Идя по этому маршруту, вы можете легко добавить базовые классы самостоятельно.

Шаблон LINQ to SQL для Visual Studio 2008 является хорошей отправной точкой

Другие вопросы по тегам