Как определить общие свойства для всех объектов в entity framework

#inheritance #entity-framework-4 #mapping

#наследование #entity-framework-4 #сопоставление

Вопрос:

Представьте, что у меня есть идентификатор пользователя (на самом деле у нас есть примерно четыре столбца, такие как userId, adddate, moddate и т.д. почти для всех таблиц) столбец почти для всех объектов.

Как я могу сделать так, чтобы такие столбцы были доступны в отдельном объекте (скажем, родительском объекте) и чтобы все другие объекты (дочерние объекты) наследовали от него?

Ответ №1:

Попробуйте использовать шаблоны T4, как описано здесь или здесь, измените шаблон, чтобы он содержал базовый класс (унаследованный от EntityObject), имеющий эти свойства, и наследовайте каждый класс от этого базового класса.

Ответ №2:

Если вы используете сгенерированные классы сущностей (POCO или EntityObject ), вам придется определить базовую абстрактную сущность в вашей модели (EDMX) и получить другие сущности в наследовании TPC — просто не делайте этого, потому что это приведет к множеству других проблем — например, вы получите доступ ко всем объектам из единственного ObjectSet базового типа, PK должен быть уникальным среди всех ваших объектов и т.д.

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

Комментарии:

1. Интересно, как такая важная вещь, как общая функциональность для всех объектов (т.е. CreatedDate, updatedDate и т.д.), Нуждается в таком количестве обходных путей с увеличенными возможностями все испортить. Хотя, по моему опыту, это легко реализовать в CodeFirst!