如何更改映射表的列名?

时间:2014-12-03 05:36:29

标签: c# .net entity-framework

我正在使用Empty EF Designer Model创建一个Entity Framework 6数据库。

我的问题可以重复如下。我有两张桌子,他们之间有多对多的关联。

EF 6 Model

当我生成数据库时,它会创建第三个映射表,我希望如此。但是,列的名称是意外的。

CREATE TABLE [dbo].[WordWordType] (
    [Words_WordId] int  NOT NULL,
    [WordTypes_WordTypeId] int  NOT NULL
);

请注意,映射表的列名有些多余且冗长。列名称包括表名称,该表名称是多余的,后跟下划线,后跟键列名称。

WordWordType
- Words_WordId
- WordTypes_WordTypeId

我希望EF 6能够创建一个包含不包含表名和下划线的列名的映射表。我需要表格如下。

WordWordType
- WordId
- WordTypeId

2 个答案:

答案 0 :(得分:0)

在Code First中,您可以使用流畅的API

modelBuilder.Entity<Word>()
      .HasMany(w => w.WordTypes)
      .WithMany(wt => wt.Words)
      .Map(x =>
           {
              x.ToTable("WordWordType"); 
              x.MapLeftKey("WordId");
              x.MapRightKey("WordTypeId");
           });

但是由于您首先使用模型,我认为唯一的方法是更改​​负责生成SQL脚本的T4文件。您可以在模型属性的Database Script Generation部分找到它。

<强>更新

请参阅this以了解调试T4。

SSDLToSQL10.tt包含两个主要部分,一个是第150行的Creating all tables,另一个是第196行的Creating all FOREIGN KEY constraints,它们在Store.GetAllEntitySets()上枚举Store.GetAllAssociationSets() 1}}并在数据库中创建表和外键,调试T4文件并查看映射表的创建位置,我怀疑它在Store.GetAllEntitySets()中,然后按照您想要的方式更改生成。

答案 1 :(得分:0)

目前,您的主键列名中已有表名,在我看来,这是一个冗余信息。

如果您的主要名称列只是Id,则EF会自动为您的列Word_IdWordType_Id命名。