什么是EF默认ID命名约定代码?

时间:2013-08-21 21:55:23

标签: c# entity-framework

我正在使用EF代码第一种方法。我开始制作映射文件(我来自nihbernate背景)但发现你真的不需要它们,除非你需要做一些改变。

我想知道它会用于我的Id的命名约定吗?

Product_Id还是ProductId

修改

根据迄今为止的评论,这让我有些困惑。我问的是因为我添加了2个新类(即表)并将它们连接起来并重新创建了我的数据库。

我表中与我的新表有关系的两个FK都有“Product_Id”,我想也许是因为我没有映射。

我刚尝试使用映射和同样的问题。

所有其他表关系都有Camel Upper Case。

修改2

嗯,有些时髦的东西在我的桌子上有两次相同的名字。一旦它将其视为FK,另一次将其视为常规列。

编辑3

想出来,说出来并在这里发帖帮我隔离问题。原因是因为我正在做poco方式

public Product Product {get; set;}
   public Guid ProductId { get; set; }

我现在发布我的ProductId我设置为int类型所以发生的事情是它会在db中生成一个名为ProductId的列,然后当它有时间制作FK时它不再使用ProductId并且不得不使用PRODUCT_ID

2 个答案:

答案 0 :(得分:9)

您可以使用ProductIdId,它将被Entity Framework的命名约定识别为您的主键。

如果要破坏约定,也可以使用密钥数据注释。

[Key]
public int Product_Id {get;set;} //Note the underscore

您也可以使用Fluent API:

modelBuilder.Entity<Product>().HasKey(t => t.Product_Id); //Breaking convention again!

答案 1 :(得分:6)

默认情况下,IdKeyDiscoveryConvention已注册,并根据其Documentation

  

主键检测不区分大小写。已识别的命名模式按优先顺序排列:

     

<强>的 'id'

     

[类型名称] ID