【问题标题】:DbUpdateConcurrencyException on insert插入时出现 DbUpdateConcurrencyException
【发布时间】:2016-08-31 17:26:09
【问题描述】:

我正在使用 Entity Framework 6 将数据插入表中以进行集成测试。当我执行以下代码时,我在调用 SaveChanges() 时收到 DbUpdateConcurrencyException。

using (var context = new CONTACTEntities())
{
    context.Facilities.AddRange(facilities);
    context.SaveChanges();
}

我不确定为什么会这样。该表应该是空的,因为在测试运行之前删除/创建了表,这是测试中我将任何数据插入该表的唯一位置。有什么想法吗?

【问题讨论】:

  • 我们可以看到构建设施的代码和数据模型吗?
  • 真的很奇怪,因为 Cuncurrency 异常仅在 SQL Server UPDATE 和 DELETE 时引发。你如何填充设施?此外,打开 SQL Server Profiler 以查看引发异常的 UPDATE/DELETE 语句。
  • 我遇到了这种情况,datetime2(7) 列被标记为 DatabaseGeneratedOption.Computed,而实际上它需要是 DatabaseGeneratedOption.None

标签: entity-framework


【解决方案1】:

如果您使用的是 SQLServer,并且表中有日期时间列,请将列类型更改为 datetime2(7)。

这听起来很奇怪,但确实有效。解释是关于毫秒的。

您必须了解 Entity Framework 如何处理表中的键。在我的代码中,我设置了 HasDatabaseGeneratedOption。它可以在您的代码中。

 public class IceCatCategoryMap : EntityTypeConfiguration<IceCatCategory>
 {
    public IceCatCategoryMap()
    {
        ToTable("SemlerServices_IceCatCategory");
        HasKey(m => m.Id);
        Property(m => m.Id).IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
    }
}   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 2019-04-02
    • 2021-11-30
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    相关资源
    最近更新 更多