Может ли ADO.NET Entity Framework предоставлять коллекции дочерних классов вместо родителей? - PullRequest
1 голос
/ 31 мая 2011

Я начинаю работать с моделями сущностей ADO.NET, и все мои объекты имеют несколько общих полей, таких как FileAs (первичный ключ), SourceURL, Name и Description , Кроме этих полей, они все очень разные. Сначала я реализовал их, используя абстрактный класс Reference, содержащий вышеупомянутые поля, и все мои другие объекты наследуют его. Это, однако, заставляет меня запрашивать каждый из моих объектов следующим образом:

foreach (MyObject obj in context.References.Where(o=>o is MyObject)) { ... }

Я не хочу искать в каждом из моих Reference s, чтобы найти все MyObjects, и хочу просто позвонить foreach (var obj in context.MyObjects) { ... }.

Я мог бы просто добавить общие свойства к каждому из MyObject классов, но тогда FileAs не будет уникальным для всех MyObject1 с * MyObject2 с. Я мог бы установить отношение 0..1 к 1 между Reference и всеми MyObject с, но это позволило бы применить один Reference к нескольким различным MyObject с различными типами.

1 Ответ

1 голос
/ 31 мая 2011

Если вы используете генерацию сущности по умолчанию с пользовательским инструментом EF (он создаст файл .Designer.cs под вашим EDMX) или генерирующую сущность шаблона T4, полученную из EntityObject, вероятно, нет способа достичь этого без базовой сущности,Проблема в том, что все сущности, созданные этими инструментами, должны наследоваться от EntityObject.Если вы хотите определить свой собственный базовый класс, вы должны также унаследовать его от EntityObject, и поэтому вы должны отобразить его.Использование модели наследования сущностей для этого сценария имеет гораздо больше недостатков, чем запросы.Например, каждый объект PK должен быть уникальным для всех объектов.

Это должно быть возможно для объектов POCO, у которых нет базового класса.Вы можете определить свой собственный базовый класс и изменить шаблон T4, чтобы использовать этот класс в качестве родительского для каждой сущности.Это не решит проблему в EDMX - вам все равно придется определить и отобразить общие свойства в каждой отдельной сущности в конструкторе (дизайнер не будет знать о родительском классе).

POCO и шаблоны T4 являются только функциямиEFv4 (VS 2010).

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