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

时间:2017-03-27 12:13:33

标签: c# .net entity-framework-6

我们有一个实体角色,标有 [DatabaseGenerated(DatabaseGeneratedOption.None)] 属性。到目前为止,我们已经使用种子将实体植入数据库。但是现在我们想要创建一个新页面来让用户添加/更新角色。将新的此类实体添加到数据库的正确方法是什么? 实体框架会自动执行此操作吗?或者我首先需要获取max id(一个简单的int列)并将其设置在新实体上?如果是这样,就并发性而言是否安全?是否有正确的方法来保证安全?

2 个答案:

答案 0 :(得分:2)

如果您使用SqlBulkCopy类对数据进行播种,则可以使用数据库自​​动生成的ID,这样您就可以充分利用两者的优势(如果您播种的话,这也会更有效率数据)。

答案 1 :(得分:1)

Is there a right way to be concurrency safe?

由于您明确说明了

[DatabaseGenerated(DatabaseGeneratedOption.None)]

您禁用并发安全数据库 - 自动生成的ID(主键/标识)。

所以你的选择是:

  • 启用数据库生成的ID
  • 使用自然键
  • 花费大量时间创建一个与数据库自动生成的ID类似的系统。
  • 你可以做的另一件事就是将PK更改为uniqueidentifier,但是如果你有FK,那么那将不会很好。然后你可以为插入创建一个新的guid而不用担心它。 (@Daniel Lorenz的建议,见评论)

实体框架在这里并没有多大帮助。 也许你可以详细说明为什么数据库生成的id被禁用了。