如果将新对象添加到 ObjectSet,则 ObjectContext.SaveChanges() 从不返回.有没有人经



我有一个名为 UnitHistoryEntities 的 EF4 EDM。数据库存储在 SQL Express 2012 中。视窗 7 64 位。

  1. 我用context = new UnitHistoryEntities()创建了一个新的上下文。
  2. 我将此上下文传递到几个对话框中,这些对话框从用户那里收集一些信息。在此期间可能执行了一些查询。
  3. 基于该输入,我使用 var unit = new Unit() 构造一个新的 Unit 实体,设置一些属性,并将其添加到上下文中context.Units.AddObject(unit)
  4. 然后我打电话给context.SaveChanges().

SaveChanges()的调用永远不会返回(我已经给了它至少 10 分钟),并且永远不会引发异常。如果我删除AddObject(),它会返回而不对数据库进行任何更改,因为没有修改任何内容。

为什么SaveChanges()再也回不来了?有人经历过这种现象吗?

当我的程序处于此条件时,我能够从 SQL 管理工作室连接数据库并对其执行查询。

实体它的函数是添加到表中,每个表都有一个函数叫自己,您可以使用实体将以下内容添加到数据库中:

UnitHistoryEntities context=new UnitHistoryEntities();
Unit unit=new Unit();
unit.field1=value1;
unit.field2=value2;
context.AddtoUnit(unit);
context.SaveChange();

事实证明,我遇到的问题与这个问题非常相似。我有一个未设置的日期时间字段。我制作了一个控制台应用程序,该应用程序在上下文中执行的操作与我的应用程序正在执行的操作完全相同。在这种情况下,SaveChanges()确实返回了,但The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.rnThe statement has been terminated.

因此,我现在将日期时间字段设置为 1/1/1900,并将其视为空日期。我的程序现在运行正常。

奇怪的是,我没有在我的 WPF 应用程序中引发异常,但我在控制台应用程序中得到了

......

这是因为 EF 在您尝试插入的数据上抛出了 DbEntityValidationException。如果 EF 禁止显示错误,则可以使用 记录查询和错误。

context.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);

最新更新