Вопрос

После от Так что дисиссия здесь, Я внедрил частичные классы, чтобы создать значения DateTime DateTime для моих созданных и измененных полей базы данных в конструкторе.

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

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

Редактировать: достойное обратите внимание, что я использую EF 4.0

Это было полезно?

Решение

Вы, безусловно, можете указать свой собственный базовый класс с помощью EF4, так и EF1, хотя с EF4 намного проще. Щелкните правой кнопкой мыши на поверхности дизайна, и вы должны увидеть опцию, чтобы добавить элемент генерации кода. Выберите генератор объекта ADO.NET Entity. Это будет файл 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, но это, вероятно, будет достаточно для вас.

Другие советы

Вы, безусловно, можете сказать EF использовать базовый класс для ваших объектов (он правильно в дизайнере как недвижимость для объекта) ... но если вы хотите убедиться, что значение по умолчанию для этого поля, возможно, вы можете подключиться к Два события на вашем объектеContext SeaseChanges и 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.

Вы можете использовать эти возможности, чтобы ввести значение (ы) по умолчанию, которое вы хотите использовать. Таким образом, в вашем обработчике Siseсих, например, вы можете проверить ObjectStateManager в контексте, чтобы увидеть, является ли состояние соответствующего объекта EntityState.Added, затем установите созданные и измененные даты по желанию.

В качестве альтернативы, как предложено, есть ли причина, что значение по умолчанию для столбца в SQL Server не может быть просто GetDate ()? (Предполагая, что вы используете SQL Server) ....

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top