我的实体有List<SecondEntityDTO>
。当EF生成表格时,在表格SecondEntities
中有一个列名FirstEntityDTO_id
。我希望此列名为“ParentEntity_id”。我怎么能这样做?
我尝试注释SecondEntityDTO
列表以及其他一些东西......
编辑1:我相信你们很少被人理解 这是我的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);
}
请注意SubEntities
表格中第三列的名称!
答案 0 :(得分:1)
此外,您可以使用Fluent Api执行相同操作,例如,覆盖上下文的OnModelCreating
方法并执行此操作:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<SecondEntity>().Property(s => s.FirstEntityDTO_id).HasColumnName("ParentEntity_id");
}
为什么不编辑Func&lt;&gt;指定该表的列。如您所见,您正在创建一个匿名类型,因此您可以在那里更改列的名称,例如:
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
方法中更改该属性的名称,但如果您已经执行了该脚本,请不要在Down
方法中更改FK名称。再次执行Update Database
命令,指定该脚本的名称。这将删除这些表,它们将使用Up
方法再次创建,但现在使用您想要的FK名称。在那一刻,您可以更改Down
中的FK名称方法:
public override void Down()
{
DropForeignKey("dbo.SubEntities", "ParentEntity_id", "dbo.MainEntities");
DropIndex("dbo.SubEntities", new[] { "ParentEntity_id" });
DropTable("dbo.SubEntities");
DropTable("dbo.MainEntities");
}
答案 1 :(得分:0)
将以下代码放入SubEntity
班级:
[ForeignKey("ParentEntity")]
public int ParentEntity_id { get; set; }
public virtual MainEntity ParentEntity { get; set; }