EntityFramework.dll中发生'System.Data.Entity.Infrastructure.DbUpdateException'

时间:2013-10-17 10:20:23

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

我写了一个相当简单的代码(基于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 = "Yoash And Maayan"
            };

            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);
            }
        }
    }

8 个答案:

答案 0 :(得分:2)

如果你需要更新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);
    }

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

Lan说,

"错误消息详细说明了您需要知道的所有内容:

附加信息:支持“评估文化”的模型'自创建数据库以来,上下文已发生更改。考虑使用Code First Migrations更新数据库(http://go.microsoft.com/fwlink/

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

来自The Original Post

答案 4 :(得分:0)

add时,具有相同主键的多个数据记录重叠,导致相同的错误

您应该查看主键设置

答案 5 :(得分:-1)

private void MainWindow_PreviewKeyDown(object sender, KeyEventArgs e)
{
    bool isAlt = Keyboard.Modifiers == ModifierKeys.Alt;
    bool isCtrl = Keyboard.Modifiers == ModifierKeys.Control;

    string ctrlMod = string.Empty;

    if (isAlt)
    {
        ctrlMod = "alt + " + e.SystemKey.ToString();
    }

    if (isCtrl)
    {
        ctrlMod = "ctrl + " + e.Key.ToString();
    }

    Debug.WriteLine("Key is " + ctrlMod);
}

答案 6 :(得分:-1)

就我而言,我在生成模型(.edmx 文件)和实体(.tt 文件)时出错。重新生成它解决问题

答案 7 :(得分:-3)

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

快乐编码!!!

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

最诚挚的问候, Thet Tin Oo