外键 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);
}
注意SubEntities
table!
第三栏的名称
将以下代码放入您的 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");
}
我的实体有一个 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);
}
注意SubEntities
table!
将以下代码放入您的 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");
}