什么是EF默认Id命名约定代码优先



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

我想知道它会用什么来命名我的Id?

Product_Id还是ProductId

编辑

根据目前的评论,这让我有点困惑。我之所以这么问,是因为我添加了两个新类(即表),并将它们连接起来,重新创建了我的数据库。

我的表中与我的新表有关系的两个FK都有"Product_Id",我想这可能是因为我没有映射。

我只是尝试使用映射和相同的问题。

所有其他表关系都具有Camel大写。

编辑2

嗯,发生了一些奇怪的事情——在我的桌子上有两次相同的名字。一旦它将其视为FK,另一次它将其仅视为常规列。

编辑3

弄清楚了,说出来并在这里发帖帮助我隔离这个问题。原因是我在做poco方式

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

我现在发布了我设置为int类型的ProductId,所以它会在数据库中生成一个名为ProductId的列,然后当它有时间制作FK时,它就不能再使用ProductId了,必须使用Product_Id

您可以使用ProductIdId,它将被实体框架的命名约定识别为主键。

如果您想打破惯例,也可以使用密钥数据注释。

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

您也可以使用Fluent API:

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

默认情况下,IdKeyDiscoveryConvention已注册,并根据其文档:

主键检测不区分大小写。公认的命名模式按优先顺序为:

"识别"

[类型名称]Id

最新更新