UPDATE февраль 2017: Вы должны проверить этот удивительный EntityFramework Reverse POCO Code First Generator проект, который состоит из шаблонов T4, чтобы сделать код сначала из существующей базы данных.
Эти шаблоны очень просты в использовании, полностью настраиваются, и я легко могу добавить свои настройки в эти шаблоны! Не говоря уже о том, что они намного полнее оригинального мастера EF. Авторы/участники этого проекта очень дружелюбны и отзывчивы, и я сам внес несколько вкладов.
_
(Оказывается, что я изобретать квадратное колесо, создавая свои собственные шаблоны T4).
Оригинал ответа (только для справки, если кто-нибудь помогает рыть в исходный код мастера EF):
Я не знаю, почему, но шаблоны для модели First (EF Дизайнер из базы данных) легко настраиваемые (но они основаны на EDMX), а код для Код First from Database не так-то просто - даже если вам удается найти шаблоны.
Если вы щелкните правой кнопкой мыши проект, нажмите кнопку «Entity Framework» и «Настройка обратного шаблонов инженера» вы получите Context.tt
, Entity.tt
и Mapping.tt
внутри папки CodeTemplates\ReverseEngineerCodeFirst
. Однако,, эти шаблоны должны быть вызваны каким-то внешним вызывающим абонентом, который должен передать некоторую контекстную информацию в шаблоны - вот почему они не готовы к настройке в качестве шаблонов First Model.
Те же шаблоны, которые вы найдете в Entity Framework source code (в папке src\PowerTools\CodeTemplates\ReverseEngineerCodeFirst
). И в \src\PowerTools\Handlers\ReverseEngineerCodeFirstHandler.cs
вы найдете метод ReverseEngineerCodeFirst
, который считывает метаданные из базы данных и переходит к тем шаблонам. Этот метод вызова может быть скопирован в собственный шаблон T4 (поэтому вам не нужно создавать эти Power Tools и устанавливать в Visual Studio), но он имеет некоторое взаимодействие с Visual Studio и с проектом, что было бы трудно сделать с простыми шаблонами T4.
Я создал T4 template на основе этого метода, упомянутого выше, в основном путем объединения всех классов/помощников, которые нужны ReverseEngineerCodeFirstHandler.cs
, и удаления ссылок на DTE Visual Studio.Есть некоторые инструкции на моем шаблоне, но в основном вы должны удалить включают EF.Utility.CS.ttinclude
, и закомментируйте переменные «вар efHost» и «код вар»
Эти шаблоны, которые вы найдете в папке CodeTemplates\ReverseEngineerCodeFirst
являются почти идентичную в Code First от мастера базы данных, за исключением некоторых незначительных различий, за исключением:
- мастер создает один-ко-многим навигационных свойств как
HashSet<T>
, в то время как шаблоны создает их как List<T>
- мастер использует nullables как
int?
, а другой использует Nullable<int>
- Мастер добавляет некоторые подавления анализа кода атрибутов
[SuppressMessage]
- Мастер создает DbSets как виртуальные, а шаблоны этого не делают.
- Мастер генерирует часть отображений с использованием аннотаций данных (например,
[Table]
, [Key]
, [StringLength]
и т. Д.), А остальные части (свойства и отношения) внутри DbContext.OnModelCreating
. Шаблоны T4 генерируют все сопоставления внутри классов конфигурации для каждого объекта (EntityTypeConfiguration<Entity>
).
Большинство этих различий можно легко отрегулировать, хотя я не думаю, что это действительно имеет значение. Если вы хотите сделать сильные настройки (например, я сделал на своих шаблонах, включая автоматический вывод о несуществующих отношениях, отношениях к представлениям, наследование классов), я предлагаю вам создать свои собственные DTO (или POCOs) для передачи Entities/Properties/NavigationProperties к включенным шаблонам. В моем случае я использую оригинал EdmMapping
, сопоставляю его в свои DTO, делаю много изменений в этих DTO (на основе моих стандартов компании) и передаю эти DTO на T4 (с небольшими изменениями).
Вы что-то нашли? Насколько я искал, он генерируется DLL, а не T4. Найдено C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ ItemTemplatesCache \ CSharp \ Data \ 1033 \ CFCSEF6 \ CodeFirst_CS_V6.0.vstemplate ->, который привел меня к C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ Microsoft.Data.Entity.Design.dll ... но еще не смог найти точный код. – drizin
@drizin пока не повезло. Пожалуйста, дайте мне знать, если вы найдете альтернативное решение. – Hasteq