尝试在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()方法内部,第二次没有找到原始值,这导致其他地方的异常。 如果出现这种情况,则不会发生:
但是保留复杂类型实例总是没有选择,也不是STE变体。 我不知道这是一种错误还是我可能会改变以防止此错误。有没有人至少预感到那里发生了什么? 谢谢!