2016-06-14 4 views
0

У меня есть около 50 баз данных, каждая из которых имеет по 150 таблиц, и работает над механизмом поиска, который позволил бы запрашивать таблицы с конкретными столбцами. Большинство структур баз данных одинаковы, поэтому идея состоит в том, чтобы генерировать объекты EF и помещать интерфейсы за сущностями, сгенерированными, если таблицы, из которых они создаются, имеют определенные столбцы, поэтому я могу позже запросить их в этом столбце.Как автоматически добавлять интерфейсы к базе данных EF сперва сгенерированные объекты, которые имеют определенные свойства (имена столбцов), редактируя шаблоны T4 .tt.

Модель, вероятно, будет постоянно меняться, поэтому я не могу вручную добавлять интерфейсы на таблицы - здесь приходят шаблоны T4.

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

ответ

2

В .tt файле изменить метод EntityClassOpening следующим способом.

stringsToMatch словарь key - это имя столбца в таблице, а value - это интерфейс, который вы хотите поместить на созданную сущность.

public string EntityClassOpening(EntityType entity) 
{ 
    var stringsToMatch = new Dictionary<string,string> { { "POLICY_NO", "IPolicyNumber" }, { "UNIQUE_ID", "IUniqueId" } }; 
    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)), 
     stringsToMatch.Any(o => entity.Properties.Any(n => n.Name == o.Key)) ? " : " + string.Join(", ", stringsToMatch.Join(entity.Properties, l => l.Key, r => r.Name, (l,r) => l.Value)) : string.Empty); 
} 

Надеюсь, это сэкономит вам время.