我有一个包含前缀
的表的现有数据库离) - px_mytable1 - tx_mytable1
当我使用实体框架从我的数据库生成模型时,前缀包含在模型名称中。
离) - 公共部分类px_mytable1 - 公共部分类tx_mytable1
如何配置实体框架以从模型名称中删除前缀?
注意:我正在使用.edmx文件从数据库架构生成模型。
答案 0 :(得分:2)
您必须对t4模板文件(.tt)进行一些更改。 首先在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文件创建tablePrefix变量并更改以下代码
<#=codeStringGenerator.DbSet(entitySet)#>
要
<#=codeStringGenerator.DbSet(entitySet).Replace(tablePerfix,"")#>
答案 1 :(得分:-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);
}