Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ef code first 在实体框架中使用标识定义PK的正确方法是什么_Ef Code First_Entity Framework 5 - Fatal编程技术网

Ef code first 在实体框架中使用标识定义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)

在EF 5.0(代码优先)中,用身份定义PK的正确方法是什么

我开始使用
[Key]
,它似乎创建了一个带有标识的密钥,但我看到了很多使用

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
这有关系吗??第二个选项是否更好,因为它更具描述性等等


谢谢

简短回答:

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

长答案:

  • 在这种情况下,您会被迫使用
    [Key(DatabaseGeneratedOption.Identity)]
    当 主键是一个
    Guid
    ,因为您需要让数据库和EF 知道它应该为此产生价值,他们只知道如何做 因此,当主键是
    int
  • [Key(DatabaseGeneratedOption.None)]
    在主键为 由用户明确插入,例如主键为 社会保险号码(db不应生成此号码)
  • 最后一种情况,
    [Key(DatabaseGeneratedOption.Computed)]
    仅为表中已经有一列 计算,例如当表中有一个全名列时 通过组合Firstname和Lastname列计算, 只有在映射到对象时,才能使用此选项 现有的数据库

这些信息大部分取自本书。

谢谢!!很好的解释。