5

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

我想知道它将用于我的 ID 的命名约定是什么?

会是Product_Id还是ProductId

编辑

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

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

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

所有其他表关系都有骆驼大写。

编辑 2

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

编辑 3

想通了,说出来并在这里发布可以帮助我隔离问题。原因是因为我在做 poco 方式

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

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

4

2 回答 2

9

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

如果你想打破约定,你也可以使用 Key data annotation。

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

您还可以使用 Fluent API:

modelBuilder.Entity<Product>().HasKey(t => t.Product_Id); //Breaking convention again!
于 2013-08-21T21:59:42.233 回答
8

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

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

'ID'

[类型名称]Id

于 2013-08-21T22:03:52.420 回答