Могу ли я сгенерировать модель EF из базы данных, и чтобы все модели реализовали интерфейс? - PullRequest
0 голосов
/ 26 октября 2011

У меня есть база данных SQL, в которой все таблицы имеют столбец идентификатора в качестве первичного ключа. Могу ли я сгенерировать Entity Framework Model из этой базы данных и убедиться, что все сгенерированные типы наследуются от интерфейса, который определяет свойство ID?

По сути, я хочу, чтобы все, что я возвращаю из базы данных, реализовало это:

public interface IDatabaseTable
{
    public int ID { get; set; }
}

Ответы [ 2 ]

2 голосов
/ 26 октября 2011

Я надеюсь, что вы используете EntityFramework 4, если вам нужно использовать шаблоны T4 для генерации вашей сущности и контекста данных, вы можете скачать их здесь

http://visualstudiogallery.msdn.microsoft.com/23df0450-5677-4926-96cc-173d02752313

Чем при настройке вам потребуется модифицировать шаблон T4 для генерации наследования.

Таким образом, вы получите два шаблона, один из которых генерирует контекст данных, а другой - генерирует объекты.

Вам нужно изменить второй (шаблон генератора сущностей), перейти к строке 41 вашего файла .tt сущности и добавить туда свое наследование следующим образом:

<#=Accessibility.ForType(entity)#> <#=code.SpaceAfter(code.AbstractOption(entity))#>partial class <#=code.Escape(entity)#><#=code.StringBefore(" : ", code.Escape(entity.BaseType))#> : IDatabaseTable

Некоторые подробности о тампонах T4 POCO вы можете найти здесь

http://sharedtolearn.blogspot.com/2010/06/entity-framework-40-and-t4-templates-to.html

http://msdn.microsoft.com/en-us/data/gg558520

0 голосов
/ 27 октября 2011

См. эту страницу MSDN о частичных классах.

Короче говоря, вы можете создать частичный класс для ваших EF-сущностей и реализовать любой интерфейс, который вам нужен.

Вот документация со страницы MSDN:

Следующее объединено из всех определений частичного типа:

XML comments

interfaces

generic-type parameter attributes

class attributes

members

Например, рассмотрим следующие объявления:

partial class Earth : Planet, IRotate { }
partial class Earth : IRevolve { }

Они эквивалентны следующим декларациям:

class Earth : Planet, IRotate, IRevolve { }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...