对于数据库开发,我使用代码优先的方法。有两个班
public class Assembly
{
public int Id {get;set;}
public virtual ICollection<OperationItem> Items {get;set;} = new List<OperationItem>();
}
public class OperationItem
{
public int Id {get;set;}
public virtual ICollection<Assembly> Assemblies {get;set;} = new List<Assembly>();
}
基于此,实体框架生成如下迁移:
CreateTable(
"dbo.AssemblyOperationItems",
c => new
{
Assembly_Id = c.Int(nullable: false),
OperationItem_Id = c.Int(nullable: false),
})
.PrimaryKey(t => new { t.Assembly_Id, t.OperationItem_Id })
.ForeignKey("dbo.Assemblies", t => t.Assembly_Id)
.ForeignKey("dbo.OperationItems", t => t.OperationItem_Id)
.Index(t => t.Assembly_Id)
.Index(t => t.OperationItem_Id);
迁移脚本本身是正确的,我对分配的名称不满意:Assembly_Id & OperationItem_Id,并且在所有其他表中调用了键AssemblyId & OperationItemId。
_在创建多对多关系时,是否可以告诉 EF 在不使用名称中的键的情况下生成名称。
PS我知道如果您通过创建链接可以解决此问题fluent api,我对不同的解决方案,注释属性等感兴趣。
当使用多对多关系时,使用 FK 命名约定,不能用注解重载。根据命名约定,FK按照如下规则组成
我们在示例中看到的内容。
要重新加载它,您可以执行以下操作:
如您所述,请像这样使用 FluentAPI:
因此,我们将进行以下迁移:
重新加载辅助键命名约定。
当我们对标准命名约定不满意时,我们可以重载这个约定。从这里举个例子。
让我们为辅助键定义一个名称重命名类,它将删除根据标准命名约定生成的 _ 字符。
我们在模型中包含二级键命名重载类,如下所示
结果,我们得到以下迁移
您可能已经注意到,辅助键名称现在没有“ _ ”字符。