Генерирование интерфейсов из базы данных сущности базы данных сначала автоматически сгенерированного кода
Я использую MVC3, С# 4.0 и Entity Framework в Visual Studio 2010. Я создаю файлы edmx и Designed.cs из базы данных. Затем я создаю интерфейсы от объектов в файле Designer.cs как часть структуры nLayer.
Исходный код
public partial class DataEntrySummary : EntityObject
который затем становится
public partial class DataEntrySummary : EntityObject, Mb.Interface.IDataEntrySummary
Меня беспокоит, что когда база данных меняет (и она будет), и я регенерирую файлы edmx, я потеряю все определения интерфейса.
Есть ли лучший способ добиться того же результата без необходимости регенерации интерфейсов.
Спасибо
Ответы
Ответ 1
EF генерирует классы с ключевым словом partial
, чтобы вы могли добавлять дополнительные функции к объектам, создавая другой файл и размещая там специфический для интерфейса материал.
public partial class DataEntrySummary : Mb.Interface.IDataEntrySummary
{
}
Эти файлы не будут затронуты, когда EF обновит модель.
Ответ 2
Вы направляетесь в правильном направлении. Но для сохранения интерфейсов после каждого обновления EDMX вам необходимо настроить файлы T4.
Вы можете посмотреть настраиваемые файлы T4 из https://entityinterfacegenerator.codeplex.com/
Они генерируют 1 интерфейс для каждого из ваших классов, чтобы вы могли легко имитировать и тестировать их отдельно.
Итак, каждый раз, когда вы добавляете новую таблицу или поле, вы можете просто выполнить свои шаблоны T4 вместе с теми, которые предоставляются Microsoft для генерации типов EF.
С уважением.
Ответ 3
Я думаю, что создание события для обновления модели так, что каждый раз, когда модель обновляется, он добавит определения интерфейса.
Другой вариант - создать прокси-класс, который реализует определенный интерфейс и наследует от модели.