[首先看代码,我看到一些使用[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
表示主键的示例,以及其他使用[Key]
的示例。
我无法找到关于两者如何比较的描述。
有人可以告诉我何时/是否要使用另一个?
一个指定显式主键,另一个指定它应该是该数据库中的一个标识字段(取决于提供者)。在很多情况下,密钥将是一个身份字段。
DatabaseGeneratedOption.Identity
您可以使用DatabaseGeneratedOption.Identity选项将非关键(非id)属性标记为数据库生成的属性。这指定该属性的值将由数据库在INSERT语句上生成。此身份属性无法更新。
请注意,数据库生成Identity属性值的方式取决于数据库提供程序。它可以是标识,行版本或GUID。 SQL Server为整数属性创建一个标识列。
Key属性可以应用于实体类中的属性,以使其成为键属性,并使其对应于PrimaryKey的列数据库中的列。默认约定创建一个主键名称为Id或Id的属性的列。的键属性将覆盖此默认约定。
如果您想指定非身份主键,则可以使用类似这样的东西
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
[(和DatabaseGeneratedOption.Identity
)数据库中的标识列表示该列在插入时自动生成值。这些通常是int列,并且类似,它们会自动增加。
另一方面,仅仅因为列是主键,not表示它是一个标识列。在许多情况下,您不只是希望数据库自动为列生成一个值。以及不能作为标识列的数据类型。
简而言之,您可以将标识列视为类似于GUID。它唯一地标识一行,但它本身并不是有用的数据。
与主键列“ email_address”进行对比,它肯定不是身份列。加上它是合法数据。