POCO中的复杂类型在DetectChanges / SaveChanges中产生NullReferenceException

时间:2012-10-11 09:04:09

标签: c#-4.0 entity-framework-4 objectcontext

尝试在EF 4.0中保存实体时,我有一种奇怪的行为。

考虑一个带有一个String-Property的简单复杂类型。然后我有一个实体POCO-Class(实际上是STE,但这不是重点),它包含这种复杂类型的几个复杂属性。

然后可以使用以下代码显示行为:

  var object = context.Records.Where(p => p.ID = requestedID).First();  // works
  object.ComplexProp1 = new ComplexTypeA(...);

  context.DetectChanges();  // success
  context.DetectChanges(); // NullReferenceException

此代码只是为了显示错误。它实际发生在我调用SaveChanges()时,内部调用了DetectChanges(),因此我使用此代码重现。 经过大量调试我发现的EF代码,在EntityEntry.FindOriginalValue()方法内部,第二次没有找到原始值,这导致其他地方的异常。 如果出现这种情况,则不会发生:

  1. 我没有将复杂属性设置为新实例,而是设置复杂类型本身的属性(例如:object.ComplexProp1.Value =“yes”)
  2. 我使用STE方式。从上下文1中获取对象,将更改应用到上下文2中并将其保存在那里。
  3. 但是保留复杂类型实例总是没有选择,也不是STE变体。 我不知道这是一种错误还是我可能会改变以防止此错误。有没有人至少预感到那里发生了什么? 谢谢!

0 个答案:

没有答案