MVC模型中,定义关键字段为Id或EntityNameId有什么意义?

In MVC model, what is the significance of defining a key field as Id or EntityNameId?

在 MVC 模型中,我们必须将关键字段声明为 Id 或 EntityNameId。它的意义何在?我可以用我想要的任何名称声明一个关键字段吗?

假设这是 Entity Framework,您可以使用 [Key] 属性修饰模型中的任何字段。

public class Student {
    [Key]
    public int StudentRegNumber { get;set; }
}

不过,我确信将 Id 保留在名称中以便在 EntityFramework 中使用是最佳做法,因为它会为您完成所有 属性 映射。如果你想更进一步,自己管理这个主键(不推荐)并让它不自动递增,你也可以使用这个属性

[DatabaseGenerated(DatabaseGeneratedOption.None)]

但理想情况下,正如我之前提到的,您希望将 Id 保留在名称中,所以让我们改用它。

public class Student {

    public int StudentId { get; set; }
    public int RegNumber { get; set; }
}

因为 EF 足够聪明,可以自动映射密钥,利用这种甜蜜的力量!

扩展

Mackan建议说明重要性。如果我们开始更改我们的主键名称以不遵循后缀的约定,然后使用 'Id' 命名,而只是让它们成为任何东西,那么在稍后构建查询或对数据集进行连接等时,它可能会变得混乱.

然而,最好做出选择并坚持一种类型的命名约定,关于 TableNameId[=42 是否真的是不好的做法存在争论 (1 & 2) =] 而不仅仅是 Id,但是这是由您决定什么最适合您,但我建议不要只给它们命名与它们的主要目的无关的东西;该记录的唯一标识。

进一步阅读

Data Annotations in Entity Framework

Entity Framework Code First Conventions

Entity Framework 代码首先依赖于每个实体都有一个用于跟踪实体的键值。 code first 依赖的约定之一是它如何暗示哪个 属性 是每个 code first class 中的键。该约定是查找名为“Id”的 属性 或组合 class 名称和“Id”的名称,例如“BlogId”。 属性 将映射到数据库中的主键列。见 link https://msdn.microsoft.com/en-us/data/jj591583.aspx