0

在 EF 5.0(代码优先)中定义具有标识的 PK 的正确方法是什么?

我开始使用[Key]这似乎创建具有身份的密钥,但我已经看到了很多使用的例子

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]

有没有关系??第二个选项是否更好,因为它更具描述性等..?

谢谢

4

1 回答 1

0

简短的回答:

[Key]它本身就足够了,如果你正确地遵循了约定,你甚至不需要它。另一方面,[Key]在语义上等于[Key(DatabaseGeneratedOption.Identity)],它们是相同的,它们等于骨骼,没有任何区别。

长答案:

  • 有一种情况是您被迫使用 [Key(DatabaseGeneratedOption.Identity)]并且当您的主键是 a 时会发生这种情况,Guid因为您需要让数据库和 EF 知道它应该为此生成一个值,他们只知道当主键是int.
  • [Key(DatabaseGeneratedOption.None)]当用户明确插入主键时使用,例如主键是社会保险号(数据库不应该生成这个)
  • 最后一种情况,[Key(DatabaseGeneratedOption.Computed)]在表中已经存在计算的列时 使用,例如当表中有通过组合 Firstname 和 Lastname 列计算的 Fullname 列时,此选项必须在以下情况下使用您正在映射到 现有数据库。

这些信息大部分来自《编程实体框架:代码优先》一书。

于 2013-07-05T18:35:28.113 回答