EF частичные классы и значения по умолчанию - PullRequest
0 голосов
/ 05 ноября 2010

Следуя указаниям SO , я реализовал частичные классы, чтобы создавать значения даты и времени по умолчанию для моих полей базы данных Created и Modified в конструкторе.

Теперь проблема в том, что в моей базе данных более 100 таблиц, и 75 из них имеют одинаковую базовую структуру, включающую определение столбца Created и Modified.

Итак. Вместо создания 75+ частичных классов, которые мне нужно поддерживать, есть ли способ создать базовый класс, от которого наследуется каждый тип EF, который наследует конструктор по умолчанию для заполнения значений DateTime для Created and Modified

РЕДАКТИРОВАТЬ: стоит отметить, что я использую EF 4.0

Ответы [ 2 ]

1 голос
/ 05 ноября 2010

Вы, безусловно, можете указать свой собственный базовый класс с EF4 и EF1, хотя с EF4 это намного проще. Щелкните правой кнопкой мыши на области дизайна, и вы увидите опцию добавления элемента генерации кода. Выберите генератор объектов сущности ADO.Net. Это будет файл T4 для вашего проекта (расширение .tt), в котором указан шаблон, который будет использоваться для генерации ваших классов сущностей из модели. Чтобы указать другой базовый класс, загляните внутрь него, чтобы найти строку типа

Private Function BaseTypeName(ByVal entity As EntityType, ByVal code As CodeGenerationTools) As String
    Return If(entity.BaseType Is Nothing, "EntityObject", MultiSchemaEscape(DirectCast(entity.BaseType, StructuralType), code))
End Function

Замените EntityObject вашим базовым классом. Обратите внимание, что если вы используете этот шаблон, ваш базовый класс должен наследоваться от System.Data.Objects.DataClasses.EntityObject - вместо этого вы можете использовать шаблон POCO, но этого, вероятно, будет достаточно для вас.

1 голос
/ 05 ноября 2010

Вы, конечно, можете сказать EF использовать базовый класс для ваших сущностей (это правильно в конструкторе как свойство для сущности) ... но если вы хотите убедиться в значении по умолчанию для этого поля, возможно, вы могли быподключитесь к двум событиям в ObjectContext SavingChanges и ObjectMaterialized.

http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.savingchanges.aspx

http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.objectmaterialized.aspx

Вы можете использовать эти возможности для ввода значений по умолчаниюВы хотите использовать.Так, в вашем обработчике SavingChanges, например, вы можете проверить ObjectStateManager в контексте, чтобы увидеть, является ли состояние соответствующей сущности EntityState.Added, а затем установить даты создания и изменения по желанию.Предполагается, есть ли причина, по умолчанию значение для столбца в SQL Server не может быть просто GetDate ()?(Предполагая, что вы используете SQL Server) ....

...