Генерирование интерфейсов из базы данных сущности базы данных сначала автоматически сгенерированного кода

Я использую 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

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

Другой вариант - создать прокси-класс, который реализует определенный интерфейс и наследует от модели.