2016-05-03 1 views
0

У меня есть существующая база данных с таблицами, которые имеют префиксEntity Framework 6 - База данных Первая - Удалить таблицы имен с префиксами

ех) - px_mytable1 - tx_mytable1

Когда я использую рамки сущности для создания моделей из моей базы данных, префикс включен в названии модели ..

ех) - общественный частичный класс px_mytable1 - общественный частичный класс tx_mytable1

Как настроить фреймворк сущности для удаления префикса из имени модели?

Примечание. Я использую .edmx-файл для генерации моделей из схемы базы данных.

+0

Вы используете первый подход к базе данных, где вы импортируете все в файл edmx или используете инструменты для обратного проектирования кода? Если вариант 1, должны быть некоторые подфайлы edmx, которые генерируют модели из модели базы данных, которые могут быть изменены для генерации информации в другой усадьбе. Если альтернатива 2, вы можете добавить свои собственные классы сопоставления, поэтому сопоставьте между первой моделью кода и вашим полем db. Документы: https://msdn.microsoft.com/en-us/data/jj591617.aspx – thsorens

+0

Возможный дубликат: http: // stackoverflow.com/questions/34088641/custom-convention-for-table-with-prefix-entity-framework или, по крайней мере, введение в обычную «конвенцию»! – granadaCoder

+0

@granadaCoder - это не первый код? – TWilly

ответ

-1

Вы можете свободно использовать API или аннотации данных для настройки своих классов, чтобы Code First мог сопоставить отношения между вашими таблицами. один из способов является переопределять значение OnModelCreating метода на вашем DbContext класса, и вы можете сопоставить классы с базой данных имен таблиц

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Class1>().ToTable("Table1"); 
     modelBuilder.Entity<Class2>().ToTable("Table2"); 
     modelBuilder.Entity<Class3>().ToTable("Table3"); 

     base.OnModelCreating(modelBuilder); 
    } 

This link may help you

1

Вы должны сделать некоторые изменения в файлах шаблонов t4 (. тт). первым о всех в yourModelName.tt файле создать переменную, как это в строке 5,6,7 ... 13

var tablePerfix="px_"; 

поиск в этом файле и найти <#=codeStringGenerator.NavigationProperty(navigationProperty)#> и заменить его

<#=codeStringGenerator.NavigationProperty(navigationProperty).Replace(tablePerfix,"")#> 

foreach (var entity in typeMapper.GetItemsToGenerate<EntityType> 
(itemCollection)) 
{ 
    fileManager.StartNewFile(entity.Name + ".cs"); 
    BeginNamespace(code); 
#> 

заменить его

foreach (var entity in typeMapper.GetItemsToGenerate<EntityType> 
(itemCollection)) 
{ 
    fileManager.StartNewFile(entity.Name.Replace(tablePerfix,"") + ".cs"); 
    BeginNamespace(code); 

и сделать это для следующих кодов

<#=codeStringGenerator.EntityClassOpening(entity).Replace(tablePerfix,"")#> 
// ... 
public <#=code.Escape(entity).Replace(tablePerfix,"")#>() 
// ... 
this.<#=code.Escape(navigationProperty).Replace(tablePerfix,"")#> = new HashSet<<#=typeMapper.GetTypeName(navigationProperty.ToEndMember.GetEntityType()).Replace(tablePerfix,"")#>>(); 

, если у вас есть 2 префикс для таблиц в БД следует использовать метод Replace дважды для каждого префикса

Наконец yourModelName.Context.tt файла create tablePrefix переменная и изменить следующий код

<#=codeStringGenerator.DbSet(entitySet)#> 

К

<#=codeStringGenerator.DbSet(entitySet).Replace(tablePerfix,"")#> 
Смежные вопросы