C# EF4代码优先:如何修改生成的连接表的命名约定?
我正在与一个现有数据库集成,因此我希望EF4代码优先代码生成的表遵守已经存在的表命名约定 现有的约定是单数实体名称,前缀为小写的“t”(例如C# EF4代码优先:如何修改生成的连接表的命名约定?,c#,database-design,asp.net-mvc-3,entity-framework-4,ef-code-first,C#,Database Design,Asp.net Mvc 3,Entity Framework 4,Ef Code First,我正在与一个现有数据库集成,因此我希望EF4代码优先代码生成的表遵守已经存在的表命名约定 现有的约定是单数实体名称,前缀为小写的“t”(例如tProduct),并用下划线连接连接表(例如tProduct\u-tOffer) 我使用下面的代码通过所有“标准”表实现了这一点。在myDbContext中,我有: protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Convention
tProduct
),并用下划线连接连接表(例如tProduct\u-tOffer
)
我使用下面的代码通过所有“标准”表实现了这一点。在myDbContext
中,我有:
protected override void OnModelCreating(ModelBuilder modelBuilder) {
modelBuilder.Conventions.Remove<PluralizingEntitySetNameConvention>();
modelBuilder.Conventions.Add<TableNamePrefixConvention>();
base.OnModelCreating(modelBuilder);
}
在这种情况下,ProductOffers
应命名为tProduct\u-tOffer
。如何强制生成的连接表符合我的命名样式
更新:正如拉迪斯拉夫在下面正确猜测的那样,我正在使用CTP5。正如我在评论中指出的那样,自定义约定在RC版本中不可用,在RTW中也不可用() 您必须手动映射它:
modelBuilder.Entity<Offer>()
.HasMany(o => o.Products)
.WithMany(p => p.Offers)
.Map(m => m.ToTable("tProduct_Offer"));
modelBuilder.Entity()
.HasMany(o=>o.Products)
.WithMany(p=>p.Offers)
.Map(m=>m.ToTable(“t产品报价”);
代码段是RC版本。CTP5在
IsIndependent()
中又使用了一个步骤,但它在RC中被删除。正如我在注释中指出的那样,自定义约定在RC版本中不可用,在RTW中也不可用()
您必须手动映射它:
modelBuilder.Entity<Offer>()
.HasMany(o => o.Products)
.WithMany(p => p.Offers)
.Map(m => m.ToTable("tProduct_Offer"));
modelBuilder.Entity()
.HasMany(o=>o.Products)
.WithMany(p=>p.Offers)
.Map(m=>m.ToTable(“t产品报价”);
代码段是RC版本。CTP5在
IsIndependent()
中又使用了一个步骤,但它在RC中被删除。自定义约定不是最终代码第一版的一部分,因此您可能正在使用CTP5。安装RC或RTW(最终)版本后,它将不起作用。很高兴知道这一点。那么我应该怎么做呢?自定义约定不是最终代码第一版的一部分,所以您可能正在使用CTP5。安装RC或RTW(最终)版本后,它将不起作用。很高兴知道这一点。那我该怎么办呢?
modelBuilder.Entity<Offer>()
.HasMany(o => o.Products)
.WithMany(p => p.Offers)
.Map(m => m.ToTable("tProduct_Offer"));