我想知道在首次使用代码时是否有机会更改Entity Framework生成的外键约束的名称。
我有两个实体 - User
和Group
- 具有多对多关系,因此存在关联表GroupUser
。遗憾的是,自动生成的外键约束名为FK_dbo.GroupUser_dbo.User_User_UserId
和FK_dbo.GroupUser_dbo.Group_Group_GroupId
。
我希望有类似FK_GroupUser_UserId
和FK_GroupUser_GroupId
的外键约束。这对我来说看起来更干净。
答案 0 :(得分:6)
无法使用数据注释或DbModelBuilder
Fluent API自定义外键约束名称。但是,您可以使用基于代码的迁移来控制名称。
第一个选项:通过迁移创建表格时:
为连接表自动生成的迁移代码如下所示:
public partial class MyMigration : DbMigration
{
public override void Up()
{
CreateTable("GroupUser",
c => new
{
UserId = c.Int(nullable: false),
GroupId = c.Int(nullable: false),
})
.PrimaryKey(t => new { t.UserId, t.GroupId })
.ForeignKey("User", t => t.UserId, cascadeDelete: true)
.ForeignKey("Group", t => t.GroupId, cascadeDelete: true)
.Index(t => t.UserId)
.Index(t => t.GroupId);
// ...
}
}
您可以在此处修改两个ForeignKey
方法调用,以便在调用update-database
之前设置自定义约束名称:
.ForeignKey("User", t => t.UserId, cascadeDelete: true,
name: "FK_GroupUser_UserId")
.ForeignKey("Group", t => t.GroupId, cascadeDelete: true,
name: "FK_GroupUser_GroupId")
第二个选项:当表已经存在时,您可以删除约束并在迁移中添加新的重命名:
public partial class MyMigration : DbMigration
{
public override void Up()
{
DropForeignKey("UserGroup", "UserId", "User");
DropForeignKey("UserGroup", "GroupId", "Group");
AddForeignKey("UserGroup", "UserId", "User",
name: "FK_GroupUser_UserId");
AddForeignKey("UserGroup", "GroupId", "Group",
name: "FK_GroupUser_GroupId")
// ...
}
}
答案 1 :(得分:2)