我想知道实体框架在导航属性的命名/生成方面遵循的规则。我观察过几个似乎没有意义的场景,所以我想知道是否有人确切知道这些是如何工作的。
情景1:
public class Post
{
public int Id { get; set; }
public User Author { get; set; }
}
生成
即。默认情况下,导航属性会生成名为[PropertyName] _Id
的FK情景2:
有意义的是,如果EF在您手动指定FK ID时生成格式[PropertyName] _Id等属性,则它将遵循相同的规则:
public class Post
{
public int Id { get; set; }
public int? Author_Id { get; set; }
public User Author { get; set; }
}
生成
如您所见,这不会自动注册为导航属性。
场景3:
如果它对场景2不起作用,为什么它适用于备用命名约定?
public class Post
{
public int Id { get; set; }
public int? AuthorId { get; set; }
public User Author { get; set; }
}
生成
有关导航属性检测和生成的规则是什么?
答案 0 :(得分:12)
这是预期的行为,它基于EF
的两种不同约定NameOfNavigationProperty_NameOfRelatedPK
此约定遵循传统的数据库命名。NameOfNavigationPropertyNameOfRelatedPK
由NavigationPropertyNameForeignKeyDiscoveryConvention
NameOfRelatedTypeNameOfItsPK
由TypeNameForeignKeyDiscoveryConvention
NameOfRelatedPK
由PrimaryKeyNameForeignKeyDiscoveryConvention
答案 1 :(得分:2)
除了@Ladislav Mrnka上面的回答,你可以在这里找到实体框架默认约定的详细参考: http://msdn.microsoft.com/en-us/library/system.data.entity.modelconfiguration.conventions(v=vs.103).aspx