如果将新对象添加到ObjectSet,则ObjectContext.SaveChanges()永远不会返回。有没有人经历过这个?

时间:2012-12-16 03:15:19

标签: c# .net visual-studio-2010 entity-framework-4 sql-server-express

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

  1. 我使用context = new UnitHistoryEntities()创建了一个新的上下文。
  2. 我将此上下文传递给几个从用户收集一些信息的对话框。在此过程中可能会进行一些查询。
  3. 根据该输入,我使用var unit = new Unit()构建一个新的Unit实体,设置一些属性,并使用context.Units.AddObject(unit)
  4. 将其添加到上下文中
  5. 然后我致电context.SaveChanges()
  6. SaveChanges()的调用永远不会返回(我已经给它至少10分钟)并且从不抛出异常。如果我删除AddObject(),它将返回而不对数据库进行任何更改,因为没有任何修改。

    为什么SaveChanges()永远不会回来?有人遇到过这种现象吗?

    当我的程序处于这种状态时,我能够从SQL Management Studio连接并对数据库执行查询。

3 个答案:

答案 0 :(得分:0)

实体的功能是添加到表中,每个表都有一个名为self的函数 ,您可以使用Entity:

将以下内容添加到数据库中
UnitHistoryEntities context=new UnitHistoryEntities();
Unit unit=new Unit();
unit.field1=value1;
unit.field2=value2;
context.AddtoUnit(unit);
context.SaveChange();

答案 1 :(得分:0)

原来我遇到的问题与this question非常相似。我有一个我没有设置的DateTime字段。我创建了一个控制台应用程序,它在我的应用程序正在执行的上下文中执行完全相同的操作在这种情况下,SaveChanges() 确实返回,但The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.\r\nThe statement has been terminated.

除外

所以我现在将我的DateTime字段设置为1/1/1900,我将其视为空日期。我的程序现在运行正常。

奇怪的是我没有在我的WPF应用程序中抛出异常,但我在控制台应用程序中做了...

答案 2 :(得分:0)

这是因为EF对您尝试插入的数据抛出了DbEntityValidationException。如果EF抑制错误,您可以使用。

记录查询和错误
context.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);