Я использую генератор Poco с EF4, и мне интересно, можно ли отредактировать шаблон T4, чтобы заставить все мои классы сущностей реализовать собственный интерфейс. Поскольку pocos сдуваются и воссоздаются каждый раз при запуске пользовательского инструмента, мне придется добавлять это при каждом обновлении - я бы хотел этого избежать.
Я понимаю, что могу создать частичные классы для каждого poco и реализовать там интерфейс, но я надеялся избежать всего этого шаблонного кода.
Любые предложения будут приветствоваться.
Я думаю, что приближаюсь к решению. Я редактирую шаблон tt, добавляя реализацию к сгенерированной подписи.
‹#=Accessibility.ForType(entity)#> ‹#=code.SpaceAfter(code.AbstractOption(entity))#>partial class ‹#=code.Escape(entity)#> : IEntity‹#=code.StringBefore(" , ", code.Escape(entity.BaseType))#>
Но я попал в небольшую загвоздку. Некоторые из моих сущностей имеют базовые классы (наследование таблиц), которые я обозначил в дизайне edmx. Мне нужно заставить все объекты реализовать интерфейс с именем IEntity. Контракт IEntity не имеет методов, поэтому реализовывать нечего. Мне нужно будет полагаться на то, что все сущности имеют общую базу. Это связано с совершенно отдельной реализацией пользовательской среды проверки. Я получаю правильные подписи для большинства сущностей, однако сущности, у которых уже есть базовый класс, вызывают шаткость, потому что вы не можете реализовать интерфейс до того, как унаследуете базовый класс. : IEntity, базовый класс не разрешен. Мне нужно поменять их местами, но я не уверен, как это сделать в шаблоне.