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,但是这是由您决定什么最适合您,但我建议不要只给它们命名与它们的主要目的无关的东西;该记录的唯一标识。
进一步阅读
Entity Framework 代码首先依赖于每个实体都有一个用于跟踪实体的键值。 code first 依赖的约定之一是它如何暗示哪个 属性 是每个 code first class 中的键。该约定是查找名为“Id”的 属性 或组合 class 名称和“Id”的名称,例如“BlogId”。 属性 将映射到数据库中的主键列。见 link https://msdn.microsoft.com/en-us/data/jj591583.aspx
在 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,但是这是由您决定什么最适合您,但我建议不要只给它们命名与它们的主要目的无关的东西;该记录的唯一标识。
进一步阅读
Entity Framework 代码首先依赖于每个实体都有一个用于跟踪实体的键值。 code first 依赖的约定之一是它如何暗示哪个 属性 是每个 code first class 中的键。该约定是查找名为“Id”的 属性 或组合 class 名称和“Id”的名称,例如“BlogId”。 属性 将映射到数据库中的主键列。见 link https://msdn.microsoft.com/en-us/data/jj591583.aspx