“System.Data.Entity.Infrastructure.DbUpdateException”发生在Enti

本文关键字:Enti DbUpdateException System Data Entity Infrastructure | 更新日期: 2023-09-27 18:35:49

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

“System.Data.Entity.Infrastructure.DbUpdateException”发生在Enti

如果需要更新 Row (如果数据库中已存在),请不要使用上下文。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);
    }

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

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

根据兰的说法,

"错误消息详细说明了您需要了解的所有信息:

附加信息:自创建数据库以来,支持"AppraisalDBContext"上下文的模型已更改。请考虑使用代码优先迁移来更新数据库 (http://go.microsoft.com/fwlink/?

这意味着您在 AppraisalDBContext 中使用的一个类已更改,但数据库尚未更新,因此现已过期。您需要更新此使用代码优先迁移。

来自原始帖子

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

您应该查看主键设置

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",

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

快乐编码!!

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

此致敬意Thet Tin Oo