Как указать имена таблиц, отличные от сущностей в EF4? - PullRequest
3 голосов
/ 15 ноября 2011

У меня есть несколько сущностей в моей EF4-модели, таких как Contacts, Calls, ContactTypes и т. Д. Когда я генерирую базу данных модели, я получаю имена таблиц с одинаковыми именами.

Как мне задать имена таблиц с префиксом ab_Contacts, ab_Calls и т. Д., Но при этом оставить сущности как Contacts и Calls в сгенерированном коде?

Я не смогнайдите способ указать это в файле .edmx.

Ответы [ 4 ]

2 голосов
/ 15 ноября 2011

Если вы сначала используете модель, вам это не нужно. Сначала модель предназначена для сценариев, когда у вас нет требований к вашей базе данных.

Изменение этого поведения требует изменения процесса генерации SSDL-части вашего EDMX (который создается, как только вы попросите дизайнера сгенерировать SQL для вас). По умолчанию этот процесс обрабатывается рабочим процессом (%VSINSTALLDIR%\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen\TablePerTypeStrategy.xaml) или он может обрабатываться шаблонами T4, если вы устанавливаете Database Generation Power Pack . Вам придется изменить либо рабочий процесс (реализовать некоторый пользовательский компонент генерации), либо шаблон T4, чтобы использовать ваше соглашение об именах.

Edit:

OK. Я решил попробовать сам, чтобы завершить ответ, даже если считаю, что достаточно указать правильный путь.

Когда вы устанавливаете Power Database Generation Power Pack, вы получаете новый набор шаблонов и рабочих процессов, установленных по указанному выше пути. Один из рабочих процессов называется Generate T-SQL Via T4 (TPT).xaml. Разница между этим рабочим процессом и оригинальным TablePerTypeStrategy.xaml заключается в том, что он использует внешние шаблоны T4 для генерации SSDL и MSL. Что вам нужно сделать, это создать копию этого рабочего процесса и поместить его в тот же каталог (вы должны получить другое имя). Вы также должны создать копию ссылочного шаблона T4 для создания SSDL с именем CSDLToSSDL_TPT.tt, а также поместить его в тот же каталог (с другим именем). Получив копию файла .tt, откройте новый файл .xaml и измените путь к шаблону SSDL на новый (либо в конструкторе в VS, либо в любом текстовом редакторе). В качестве последнего шага вы должны открыть свою копию .tt файла и обновить EntitySet создание элемента:

foreach (EntityType entityType in edm.GetAllEntityTypes()) { #>
    <EntitySet Name="<#=WriteEntityTypeName(entityType, edm)#>" EntityType="<#=ssdlModelNamespace#>.<#=WriteEntityTypeName(entityType, edm)#>" Table="prefix_<#=WriteEntityTypeName(entityType, edm)#>" store:Type="Tables" Schema="<#=databaseSchemaName#>" />
<#  } 

Я добавил атрибут Table с именем, указывающим prefix_ (вы можете заменить его своим). Теперь вы должны выбрать новый рабочий процесс в Мастер создания базы данных из модели и создать новый сценарий SQL.

0 голосов
/ 11 апреля 2014

В EF6 просто измените свойство имени набора сущностей в свойстве объекта

НТН Lorenzo

0 голосов
/ 15 ноября 2011

вы можете попробовать вот так ..

Если вам просто нужно изменить имя таблицы, вы можете:

  1. Открыть файл EDMX с помощью XML Editor.
  2. Найдите в нем раздел SSDL.
  3. Найдите элемент набора сущностей, например <EntitySet Name="Customers" EntityType="ExampleModel.Store.Customers" Schema="dbo" />.
  4. Добавить Table="MyTableName" атрибут. <EntitySet Name="Customers" EntityType="ExampleModel.Store.Customers" Schema="dbo" Table="MyTableName" />

Вот полная спецификация CSDL, SSDL, MSL .

Надеюсь, это поможет.

взято из этой ссылки

0 голосов
/ 15 ноября 2011

В вашем контексте вы можете переопределить OnModelCreating (DbModelBuilder modelBuilder) и сделать что-то вроде этого:

modelBuilder.Entity<Contact>().ToTable("ab_Contact");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...