Общие столбцы в ADO.NET Entities - PullRequest
0 голосов
/ 17 марта 2009

Существует ли способ извлечения общих столбцов из различных таблиц в один базовый класс в ADO.NET Entity Framework при использовании дизайнера EDMX? Например, каждая таблица в моей базе данных имеет столбцы «LastUpdatedBy» и «LastUpdatedDate», необходимые для аудита. Я хотел бы установить эти значения автоматически в событии SavingChanges в моем сгенерированном ObjectContext без приведения к отдельным типам сущностей. См. Пример этого Как выполнить бизнес-логику при сохранении изменений (Entity Framework) . В примере вы можете увидеть, как они приводятся к сущности для доступа к различным свойствам. Я хотел бы иметь возможность использовать базовый тип только один раз (если он этого типа) и установить свойства.

Ответы [ 3 ]

0 голосов
/ 26 октября 2009

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

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

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

0 голосов
/ 18 марта 2011

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

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

Simon

0 голосов
/ 18 марта 2009

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

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

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

Марк

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