它只是一个属性,还是您需要全面使用(即整个模型使用外键名称始终为“Id”+ NavigationPropertyName 的约定)?如果您只想要单个实体的外键,则最好仅使用该ForeignKey
属性:
public class Guru
{
public int Id { get; set; }
public int? IdKotaLahir { get; set; }
[ForeignKey("IdKotaLahir")]
public virtual Kota KotaLahir { get; set; }
}
这适用于 EF5 和 EF6。在 EF6 中,您可以使用自定义约定来配置外键属性。这是我想出的自定义约定:
public class NavigationPropertyConfigurationConvention
: IConfigurationConvention<PropertyInfo, NavigationPropertyConfiguration>
{
public void Apply(
PropertyInfo propertyInfo, Func<NavigationPropertyConfiguration> configuration)
{
var foreignKeyProperty =
propertyInfo.DeclaringType.GetProperty("Id" + propertyInfo.Name);
if (foreignKeyProperty != null && configuration().Constraint == null)
{
var fkConstraint = new ForeignKeyConstraintConfiguration();
fkConstraint.AddColumn(foreignKeyProperty);
configuration().Constraint = fkConstraint;
}
}
}
我还为此写了一篇更详细的博客文章。