外键 EF6 的名称

Name of Foreign Key EF6

我的实体有一个 List<SecondEntityDTO>。当 EF 生成 table 时,在 table SecondEntities 中有一个列名 FirstEntityDTO_id。我希望将此专栏命名为 "ParentEntity_id"。我该怎么做?

我尝试注释 SecondEntityDTO 的列表和其他一些东西...

Edit1:我相信你们误会了。
这是我的 MainEntity:

[Table("MainEntities")]
public class MainEntityDTO
{
    public string Title { get; set; }
    [Key]
    public int id { get; set; }
    public List<SubEntityDTO> SubEntities { get; set; }
}

这是SubEntityDTO

[Table("SubEntities")]
public class SubEntityDTO
{
    [Key]
    public int id { get; set; }
    public string Title { get; set; }
}

这就是迁移:

public override void Up()
    {            
        CreateTable(
            "dbo.MainEntities",
            c => new
                {
                    id = c.Int(nullable: false, identity: true),
                    Title = c.String(),
                    Discriminator = c.String(nullable: false, maxLength: 128),
                })
            .PrimaryKey(t => t.id);

        CreateTable(
            "dbo.SubEntities",
            c => new
                {
                    id = c.Int(nullable: false, identity: true),
                    Title = c.String(),
                    MainEntityDTO_id = c.Int(),
                })
            .PrimaryKey(t => t.id)
            .ForeignKey("dbo.MainEntities", t => t.MainEntityDTO_id)
            .Index(t => t.MainEntityDTO_id);
    }

注意SubEntitiestable!

第三栏的名称

将以下代码放入您的 SubEntity class:

[ForeignKey("ParentEntity")]
public int ParentEntity_id { get; set; }

public virtual MainEntity ParentEntity { get; set; }

此外,您可以使用 Fluent Api 执行相同的操作,例如,覆盖 Context 的 OnModelCreating 方法并执行此操作:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
   modelBuilder.Entity<SecondEntity>().Property(s => s.FirstEntityDTO_id).HasColumnName("ParentEntity_id");
}

更新

为什么不编辑指定 table 列的 Func<>。如您所见,您正在创建一个匿名类型,因此您可以在那里更改列的名称,例如:

 CreateTable(
            "dbo.SubEntities",
            c => new
            {
                id = c.Int(nullable: false, identity: true),
                Title = c.String(),
                ParentEntity_id = c.Int(),
            })
            .PrimaryKey(t => t.id)
            .ForeignKey("dbo.MainEntities", t => t.ParentEntity_id)
            .Index(t => t.ParentEntity_id);

如果这样做,请记住在 Down 方法中更改 属性 的名称,但如果您已经执行了该脚本,请不要在 [=] 中更改 FK 名称14=] 方法。再次执行指定该脚本名称的 Update Database 命令。这将删除那些 tables 并且它们将使用 Up 方法再次创建,但现在使用您想要的 FK 名称 it.In 那一刻是您可以更改 FK 名称的时候在 Down 方法中:

 public override void Down()
 {
        DropForeignKey("dbo.SubEntities", "ParentEntity_id", "dbo.MainEntities");
        DropIndex("dbo.SubEntities", new[] { "ParentEntity_id" });
        DropTable("dbo.SubEntities");
        DropTable("dbo.MainEntities");
 }