在 EF 5.0(代码优先)中定义具有标识的 PK 的正确方法是什么?
我开始使用[Key]
这似乎创建具有身份的密钥,但我已经看到了很多使用的例子
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
有没有关系??第二个选项是否更好,因为它更具描述性等..?
谢谢
在 EF 5.0(代码优先)中定义具有标识的 PK 的正确方法是什么?
我开始使用[Key]
这似乎创建具有身份的密钥,但我已经看到了很多使用的例子
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
有没有关系??第二个选项是否更好,因为它更具描述性等..?
谢谢
简短的回答:
[Key]
它本身就足够了,如果你正确地遵循了约定,你甚至不需要它。另一方面,[Key]
在语义上等于[Key(DatabaseGeneratedOption.Identity)]
,它们是相同的,它们等于骨骼,没有任何区别。
长答案:
[Key(DatabaseGeneratedOption.Identity)]
并且当您的主键是 a 时会发生这种情况,Guid
因为您需要让数据库和 EF 知道它应该为此生成一个值,他们只知道当主键是int
.[Key(DatabaseGeneratedOption.None)]
当用户明确插入主键时使用,例如主键是社会保险号(数据库不应该生成这个)。[Key(DatabaseGeneratedOption.Computed)]
仅在表中已经存在计算的列时
使用,例如当表中有通过组合 Firstname 和 Lastname 列计算的 Fullname 列时,此选项必须仅在以下情况下使用您正在映射到
现有数据库。这些信息大部分来自《编程实体框架:代码优先》一书。