C# EF4代码优先:如何修改生成的连接表的命名约定?

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

我正在与一个现有数据库集成,因此我希望EF4代码优先代码生成的表遵守已经存在的表命名约定

现有的约定是单数实体名称,前缀为小写的“t”(例如
tProduct
),并用下划线连接连接表(例如
tProduct\u-tOffer

我使用下面的代码通过所有“标准”表实现了这一点。在my
DbContext
中,我有:

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"));