2014-02-18 6 views
3

У меня есть много общих методов в моей программе, которые принимают некоторый сгенерированный объект как параметр. Таким образом, методы, такие как:Базовый класс в Entity Framework 6?

public void DoHerpDerp<EntityType>() 

В то время как это прекрасно и делает работу, пользователи моих методов все еще может передать то, что они хотят в качестве родового параметра (и сбою приложения). Я хочу строго ограничить их объектами сгенерированных объектов (я использую подход Database First). То, что я хочу написать что-то вроде:

public void DoHerpDerp<EntityType>() where EntityType : BaseEntity 

Есть такой класс, как BaseEntity, и если это не один, как я работаю вокруг этого? И нет, я не собираюсь писать 200 частичных классов, которые реализуют интерфейс.

ответ

6

Вы можете изменить генерацию объектов, адаптировав шаблон T4.

Ниже приведена соответствующая часть шаблона T4 (например, Model.tt) для генерации объявления класса, например. «partial class MyEntity»:

public string EntityClassOpening(EntityType entity) 
{ 
    return string.Format(
     CultureInfo.InvariantCulture, 
     "{0} {1}partial class {2}{3}", 
     Accessibility.ForType(entity), 
     _code.SpaceAfter(_code.AbstractOption(entity)), 
     _code.Escape(entity), 
     _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType))); 
} 

в

public string EntityClassOpening(EntityType entity) 
{ 
    return string.Format(
     CultureInfo.InvariantCulture, 
     "{0} {1}partial class {2}{3}{4}", 
     Accessibility.ForType(entity), 
     _code.SpaceAfter(_code.AbstractOption(entity)), 
     _code.Escape(entity), 
     _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)), 
     string.IsNullOrEmpty(_code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType))) ? _code.StringBefore(" : ", "BaseClass") : ""); 
} 

В этом примере, каждый класс, который не имеет супер-класса порождается как подкласс BaseClass, которые вы можете реализовать, как вы пожелает.

+0

Спасибо, что сработало как шарм! – Davor

Смежные вопросы