C# EF默认Id命名约定代码是什么?
我使用的是EF代码优先的方法。我开始制作映射文件(我来自nihbernate背景),但发现除非您需要做一些更改,否则您真的不需要它们 我想知道我的Id的命名约定将使用什么 它是C# EF默认Id命名约定代码是什么?,c#,entity-framework,C#,Entity Framework,我使用的是EF代码优先的方法。我开始制作映射文件(我来自nihbernate背景),但发现除非您需要做一些更改,否则您真的不需要它们 我想知道我的Id的命名约定将使用什么 它是Product\u Id还是ProductId 编辑 根据到目前为止的评论,这让我有点困惑。我这样问是因为我添加了两个新类(即表),并将它们连接起来,然后重新创建了我的数据库 我的表中与新表有关系的两个FK都有“Product_Id”,我想这可能是因为我没有映射它 我只是尝试使用映射和相同的问题 所有其他表关系都是大写的
Product\u Id
还是ProductId
编辑
根据到目前为止的评论,这让我有点困惑。我这样问是因为我添加了两个新类(即表),并将它们连接起来,然后重新创建了我的数据库
我的表中与新表有关系的两个FK都有“Product_Id”,我想这可能是因为我没有映射它
我只是尝试使用映射和相同的问题
所有其他表关系都是大写的
编辑2
嗯,有什么奇怪的事情发生了,我的桌子上有两个相同的名字。一旦它将其视为FK,另一次它将其视为普通列
编辑3
把它弄明白,说出来,贴在这里,帮我把问题隔离开来。原因是因为我用的是poco方式
public Product Product {get; set;}
public Guid ProductId { get; set; }
现在,我释放了我的ProductId,我将其设置为int类型,因此发生的事情是,它将在db中生成一个名为ProductId的列,然后当它有时间创建FK时,它将无法再使用ProductId,而必须使用ProductId。您可以使用
ProductId
或Id
,它将被识别为您的主键通过实体框架的命名约定
如果要打破惯例,还可以使用键数据注释
[Key]
public int Product_Id {get;set;} //Note the underscore
您还可以使用Fluent API:
modelBuilder.Entity<Product>().HasKey(t => t.Product_Id); //Breaking convention again!
modelBuilder.Entity().HasKey(t=>t.Product\u Id)//再次打破惯例!
默认情况下,IdKeyDiscoveryConvention
根据其:
主键检测不区分大小写。公认的命名模式按优先顺序为:
'Id'
[type name]Id
只需使用
Id
。为什么在属性名中需要产品
,而它已经在类名中了?第二个-ProductId。EF将自动使用该字段作为主键,因为水开始变得浑浊。您可能需要撰写另一个问题吗?可能是“讲述一个稍有不同的故事”的重复:不太可能,它只是将IdKeyDiscoveryConvention
和(似乎缺少文档)结合在一个段落中。真的。但是只有在类型为Int16
、Int32
或Int64
的情况下才可以。啊,这是一个很好的观点。Guid
被删除的事实让我感到惊讶。