C# EF默认Id命名约定代码是什么?

C# EF默认Id命名约定代码是什么?,c#,entity-framework,C#,Entity Framework,我使用的是EF代码优先的方法。我开始制作映射文件(我来自nihbernate背景),但发现除非您需要做一些更改,否则您真的不需要它们 我想知道我的Id的命名约定将使用什么 它是Product\u Id还是ProductId 编辑 根据到目前为止的评论,这让我有点困惑。我这样问是因为我添加了两个新类(即表),并将它们连接起来,然后重新创建了我的数据库 我的表中与新表有关系的两个FK都有“Product_Id”,我想这可能是因为我没有映射它 我只是尝试使用映射和相同的问题 所有其他表关系都是大写的

我使用的是EF代码优先的方法。我开始制作映射文件(我来自nihbernate背景),但发现除非您需要做一些更改,否则您真的不需要它们

我想知道我的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
被删除的事实让我感到惊讶。