2016-06-15 11 views
1

Я пытаюсь найти и настроить шаблон T4 модели данных Entity ADO.Net для кода EF сначала из существующей базы данных.Настроить шаблон T4 - ADO.Net Модель данных Entity для кода EF сначала из существующей базы данных

Что я хочу настроить или изменить, это сопоставление типов данных. Я использую Oracle ODP.Net провайдера, который поддерживает EF. Я пытаюсь переназначить номер типа данных Oracle в Int64 вместо десятичного из-за моего требования.

Поскольку я новичок в редактировании файлов T4 для настройки, мне трудно найти файл шаблона, который выполняет первое сопоставление кода. Любая помощь в указании меня в правильном направлении ценится. enter image description here

+0

Вы что-то нашли? Насколько я искал, он генерируется 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

+0

@drizin пока не повезло. Пожалуйста, дайте мне знать, если вы найдете альтернативное решение. – Hasteq

ответ

0

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 (с небольшими изменениями).

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

  • Нет связанных вопросов^_^