Способ автоматического добавления базового класса LinqToSql в сущности? - PullRequest
2 голосов
/ 04 января 2009

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

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

Ответы [ 3 ]

7 голосов
/ 05 января 2009

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

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

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

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

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

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

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

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

3 голосов
/ 04 января 2009

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

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

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

1 голос
/ 04 января 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...