2009-03-16 3 views
0

Есть ли способ извлечь общие столбцы из разных таблиц в один базовый класс в платформе Entity Framework ADO.NET при использовании дизайнера EDMX? Например, каждая отдельная таблица в моей базе данных имеет столбец «LastUpdatedBy» и «LastUpdatedDate», необходимый для целей аудита. Я хотел бы установить эти значения автоматически в событии «SavingChanges» в моем сгенерированном объекте ObjectContext без использования отдельных типов сущностей. См. Пример этого How to: Execute Business Logic When Saving Changes (Entity Framework). Вы можете увидеть в примере, как они передают сущности для доступа к различным свойствам. Я хотел бы иметь возможность применить к базовому типу только один раз (если он этого типа) и установить свойства.Общие столбцы в объектах ADO.NET

ответ

0

Я боюсь, что, вероятно, нет - насколько я понимаю, дизайнер EDMX будет генерировать единый (хотя и частичный) класс для каждой таблицы/сущности, и вы не можете «вставлять» любые общие базовые таблицы в микс.

Что вы можете исследовать, возможно, поместите ваши общие данные в интерфейс (ICommonData), а затем реализуйте этот интерфейс.

Не знаю, как вы бы внедрить этот интерфейс в процессе дизайнерского EDMX, хотя :-(

Марк

0

Посмотрите this article. Это для LINQ к SQL, но может быть легко адаптирована к EF по линиям this article. Первый имеет дело с вашим сценарием, где все таблицы имеют требуемые столбцы аудита, а второй - с использованием единой таблицы аудита для всей БД и фактически сохраняет старые и новые значения для каждого изменения.

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

BTW, если вы, как и я, находите XML-сериализацию неуклюжим способом хранения истории состояния объекта, вы можете посмотреть на это EF specific solution, который использует таблицу подробных данных AuditValues ​​для хранения старых и новых значений измененных свойств, но это никто не проверяет вставки вообще.

0

Он выполняет ревизию вставок - но прочитайте Часть 1, чтобы понять, почему я делаю это в слегка обратном порядке (я понимаю, почему вы говорите, что этого не делает ... и он не вставляет «вставку» «запись аудита, но контрольный журнал все еще существует);

http://blogs.msdn.com/b/simonince/archive/2009/04/20/auditing-data-changes-in-the-entity-framework-part-1.aspx

Simon

Смежные вопросы