DatabaseGenerate(DatabaseGenerateOption.Identity) 与 Key

Jon*_*ood 4 c# entity-framework ef-code-first .net-core razor-pages

首先查看代码,我看到一些用于[DatabaseGenerated(DatabaseGeneratedOption.Identity)]表示主键的示例,以及其他使用[Key].

我无法找到两者如何比较的描述。

有人可以告诉我何时/是否想使用其中一种而不是另一种吗?

AAA*_*ddd 6

一个指定显式的Primary Key,另一个指定它应该是该数据库中的身份字段(这取决于提供者)。在很多情况下,密钥将是一个身份字段。

数据库生成选项.Identity

您可以使用DatabaseGenerateOption.Identity选项将非键(非 ID)属性标记为数据库生成的属性。这指定属性的值将由数据库在 INSERT 语句上生成。无法更新此身份属性。

请注意,数据库生成 Identity 属性值的方式取决于数据库提供程序。它可以是身份、行版本或 GUID。SQL Server 为整数属性创建一个标识列。

关键属性

Key 属性可以应用于实体类中的属性,使其成为键属性,并将对应的列设置为数据库中的 PrimaryKey 列。默认约定为名称为 Id 或 Id 的属性创建主键列。Key 属性会覆盖此默认约定。

如果你想指定一个非身份主键,你可以使用这样的东西

[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
Run Code Online (Sandbox Code Playgroud)