我有这样的模型
public class Class1 {
public int identifier {get;set;}
}
public class Class2 {
public int identifier {get;set;}
public List<Class1> holders {get;set;}
public List<Class1> users{get;set;}
}
我的问题是在Class1名称中生成的外键是“ Class2_identifier”和“ Class2_identifier1”,而我想要的是“ Class2_holders_identifier”和“ Class2_users_identifier”
真正的模型非常庞大,因此我要寻找的是替代“添加迁移”步骤中名称的生成方式
答案 0 :(得分:2)
这不是一个完整的实现,只是一个提示:如果您使用EntityFramework 6,则可以定义自定义模型约定:
public class ForeignKeyNamingConvention : IStoreModelConvention<AssociationType>
{
public void Apply(AssociationType association, DbModel model)
{
if (association.IsForeignKey)
{
var constraint = association.Constraint;
// Implement your renaming code.
// The data you need is inside association.Constraint.
}
}
}
并将其添加到您的DbContext.OnModelCreating
:
modelBuilder.Conventions.Add(new ForeignKeyNamingConvention());
This answer包含一些可重复使用的代码(在这种情况下,约定用于删除列名中的下划线)。
编辑: OP在此处提供了最终解决方案:
ef核心中提到的问题“与ef6中的问题相同,但没有消息”控制台
“ Class1”和“ Class2”之间存在多种关系,而没有配置外键属性,导致EF在“组织”上创建阴影属性,其名称取决于发现顺序。
public class ForeignKeyNamingConvention : IStoreModelConvention<AssociationType>
{
public void Apply(AssociationType association, DbModel model)
{
if (association.IsForeignKey)
{
var constraint = association.Constraint;
// as i just needed the fk column name to be more clear
// "{entityName}_{propertyName}" which is provided in
// {association.Name}
association.Constraint.ToProperties[0].Name = association.Name;
}
}
}