Ef code first 在实体框架中使用标识定义PK的正确方法是什么
在EF 5.0(代码优先)中,用身份定义PK的正确方法是什么 我开始使用Ef code first 在实体框架中使用标识定义PK的正确方法是什么,ef-code-first,entity-framework-5,Ef Code First,Entity Framework 5,在EF 5.0(代码优先)中,用身份定义PK的正确方法是什么 我开始使用[Key],它似乎创建了一个带有标识的密钥,但我看到了很多使用 [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 这有关系吗??第二个选项是否更好,因为它更具描述性等等 谢谢简短回答: [Key]本身就足够了,如果你正确地遵循惯例,你甚至不需要它。另一方面,[Key]在语义上等同于[Key(DatabaseGeneratedOption.Identity)
[Key]
,它似乎创建了一个带有标识的密钥,但我看到了很多使用
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
这有关系吗??第二个选项是否更好,因为它更具描述性等等
谢谢简短回答:
[Key]
本身就足够了,如果你正确地遵循惯例,你甚至不需要它。另一方面,[Key]
在语义上等同于[Key(DatabaseGeneratedOption.Identity)]
,它们是相同的,它们等同于骨骼,没有任何区别
长答案:
- 在这种情况下,您会被迫使用
当 主键是一个[Key(DatabaseGeneratedOption.Identity)]
,因为您需要让数据库和EF 知道它应该为此产生价值,他们只知道如何做 因此,当主键是Guid
时int
在主键为 由用户明确插入,例如主键为 社会保险号码(db不应生成此号码)[Key(DatabaseGeneratedOption.None)]
- 最后一种情况,
仅为 当表中已经有一列 计算,例如当表中有一个全名列时 通过组合Firstname和Lastname列计算, 只有在映射到对象时,才能使用此选项 现有的数据库[Key(DatabaseGeneratedOption.Computed)]
这些信息大部分取自本书。谢谢!!很好的解释。