【问题标题】:'System.Data.Entity.Infrastructure.DbUpdateException' occurred in EntityFramework.dllEntityFramework.dll 中发生“System.Data.Entity.Infrastructure.DbUpdateException”
【发布时间】:2013-10-25 18:51:44
【问题描述】:

我写了一个相当简单的代码(基于 WCF 和 Windows 窗体的客户端服务器)。 我试图更新数据库以便我可以测试我的代码,但我遇到了上述异常。 任何想法如何解决它?

      // For testing 
      public void updateTable() 
      {
        using (var db = new overlayDBEntities())
        {
            var overlaydb = new overlayData
            {
                DeviceId = "1111",
                TimestampUTC = new DateTime(1990, 1, 1, 9, 9, 9),
                OverlayData1 = "Random Text"
            };

            db.overlayData.Add(overlaydb);

            try
            {
                db.SaveChanges();
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            var overlaydb1 = new overlayData
            {
                DeviceId = "1111",
                TimestampUTC = new DateTime(2000, 2, 2, 10, 10, 10),
                OverlayData1 = "seconed seconed seconed "
            };

            db.overlayData.Add(overlaydb);

            try
            {
                db.SaveChanges();
            }
            catch (Exception ec) 
            {
                Console.WriteLine(ec.Message);
            }
        }
    }

【问题讨论】:

  • 使用 ex.ToString 或调试器获取一些有用的信息。
  • 您需要某种内部异常来获取问题的详细信息,您报告的异常消息只是告诉我们数据库更新失败,内部异常可能有 SQL 错误消息。
  • 知道我是怎么做到的吗?
  • 我可以看到它发生在exe这一行之后
  • 'iisexpress.exe'(托管 (v4.0.30319)):已加载 'C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.Types\11.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.Types。 dll'

标签: c# wcf visual-studio entity-framework


【解决方案1】:

如果你需要更新 Row 如果数据库中已经存在则不要使用 context.Add();你可以使用如下。

    var overlaydb1 = new overlayData
    {
      DeviceId = "1111",
      TimestampUTC = new DateTime(2000, 2, 2, 10, 10, 10),
      OverlayData1 = "seconed seconed seconed "
    };

    try
    {
      db.overlayData.Attach(overlaydb1);
      db.ObjectStateManager.ChangeObjectState(overlaydb1, EntityState.Modified);
      db.SaveChanges();
    }

    catch (Exception ec) 
    {
      Console.WriteLine(ec.Message);
    }

【讨论】:

    【解决方案2】:

    当用户忘记在特定表中添加Primery key 时也会出现同样的错误.. 然后通过应用程序添加数据。

    【讨论】:

      【解决方案3】:

      我认为问题在于您的日期时间类型。 sqlsever 有多个日期时间。如果您检查您的内部异常,您可能会看到您尝试放入表中的类型以及它实际需要的类型。转换不能自动完成,您应该在表格中更改它或在代码中转换它。 可以是datetime、datetime2(7)等

      【讨论】:

        【解决方案4】:

        根据兰的说法,

        “错误消息详细说明了您需要了解的所有内容:

        附加信息:支持“AppraisalDBContext”上下文的模型在创建数据库后发生了变化。考虑使用 Code First 迁移来更新数据库 (http://go.microsoft.com/fwlink/?

        这意味着您在 AppraisalDBContext 中使用的类之一已更改,但数据库尚未更新,因此现在已过时。您需要更新此使用 Code First 迁移。”

        来自The Original Post

        【讨论】:

          【解决方案5】:

          add时主键相同的多条数据记录重叠,导致同样的错误

          您应该检查您的主键设置

          【讨论】:

            【解决方案6】:
            using Code first approach .
            How to define primary key in Web API.
            
            Eg:- Model Class
              public class Categories
                {
                    [Key]
                    public int cateId { get; set; }
                    public string cateName { get; set; }
                }
            Controller Class:-  Categories Controller
             public bool AddCate(Categories preg)
                    {            
                        db.Categories.Add(preg);
                        db.SaveChanges();
                        return true;
                    }
            Context Db Class
              public System.Data.Entity.DbSet<TestingWebApi.Models.Categories> Categories { get; set; }
             Error:-"System.Data.Entity.Infrastructure.DbUpdateException",
            

            【讨论】:

              【解决方案7】:

              以下是解决 System.Data.Entity.Infrastructure.DbUpdateException 的过程。 请按照说明进行操作。

              编码愉快!!!

              https://msdn.microsoft.com/en-us/data/dn579398.aspx

              最好的问候, 提丁乌

              【讨论】:

              • 嗨,欢迎来到 StackOverflow。请不要发布链接作为答案。如果页面消失,您的答案将变得毫无用处。使用这些信息来构建您的答案,并且仅将链接用作参考。谢谢。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-04-10
              • 1970-01-01
              • 2014-04-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多