如何添加标有 [DatabaseGenerated(DatabaseGeneratedOption.None)] 的新实体

How to add a new entity marked with [DatabaseGenerated(DatabaseGeneratedOption.None)]

我们有一个实体,Role,用属性 [DatabaseGenerated(DatabaseGeneratedOption.None)] 标记。到目前为止,我们已经使用播种将实体播种到数据库中。但是现在我们要创建一个新页面来让用户 add/update 角色。将新的此类实体添加到数据库的正确方法是什么? Entity Framework 会自动执行吗?或者我是否首先需要获取最大 ID(一个简单的 int 列)并将其设置在新实体上?如果是这样,就并发性而言是否安全?有没有正确的并发安全方法?

Is there a right way to be concurrency safe?

由于您明确声明

[DatabaseGenerated(DatabaseGeneratedOption.None)]

您禁用并发安全数据库自动生成的 ID(主要 keys/identity)。

所以你的选择是:

  • 启用数据库生成的 ID
  • 使用自然键
  • 花费大量时间创建一个行为类似于数据库自动生成的 ID 的系统。
  • 您可以做的另一件事是将 PK 更改为唯一标识符,但如果您有 FK,则效果不佳。然后你可以为插入创建一个新的 guid 而不必担心它。 (@Daniel Lorenz 的建议,见评论)

entity framework 在这里并没有多大帮助。 也许您可以详细说明为什么数据库生成的 ID 被禁用。

如果您使用 SqlBulkCopy class 来播种数据,您可以使用数据库自​​动生成的 ID,让您两全其美(如果您正在播种大量数据)。