2013-07-25 4 views
2

Мы имеем следующую часть в нашем T4Entity Framework реализовать общий интерфейс на Т4

<#=codeStringGenerator.EntityClassOpening(entity)#> : IEntity 

Теперь, так как не все наши предприятия используют тип int как есть первичный ключ. Я хотел бы сделать этот интерфейс общим. Таким образом, мы можем иметь int, guid, long, short как тип. (Изменение типа не представляется возможным, наследие базы данных)

что-то вроде

public IEntity<TId> 
{ 
    TId Id { get; } 
} 

Как я теперь в (по умолчанию) рамочное сущность T4, что тип является первичного ключа? Есть ли способ доступа к первичному ключу в T4?

Или является единственным вариантом, использующим частичные классы? (я не хочу использовать парциальные для этого. Потому что каждый раз, когда класс добавляется к модели, разработчики должны знать об интерфейсе и реализовать его на новый разделяемый класс)

ответ

2

Вы можете использовать KeyMembers недвижимость

http://msdn.microsoft.com/en-us/library/system.data.metadata.edm.entitytypebase.keymembers.aspx

Тогда обеспечивая вас есть только 1 ключ можно восстановить, что и использовать DeclaringType свойство EdmMember класса.

http://msdn.microsoft.com/en-us/library/system.data.metadata.edm.edmmember.aspx

Как примечание стороны, я бы, вероятно, рассмотреть возможность расширения EntityClassOpening метод, чтобы добавить общий интерфейс к декларации открытия

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