7

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

7 回答 7

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);
    }
于 2013-10-17T11:27:04.193 回答
2

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

于 2016-05-13T12:11:44.257 回答
1

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

于 2015-04-27T07:34:21.820 回答
0

据兰介绍,

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

附加信息:支持“AppraisalDBContext”上下文的模型自创建数据库以来已更改。考虑使用 Code First 迁移更新数据库 ( http://go.microsoft.com/fwlink/ ?

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

来自原始帖子

于 2014-08-18T06:23:39.660 回答
0

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

您应该检查您的主键设置

于 2018-03-22T09:55:59.357 回答
-2
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",
于 2017-03-07T18:08:57.753 回答
-4

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

快乐编码!

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

最好的问候, Thet Tin Oo

于 2015-07-09T09:38:57.733 回答