实体框架4加载参考例外

Rap*_*ber 10 c# entity-framework

我在实体框架4中加载对父对象的引用时遇到麻烦.由于延迟加载,对象(条件)的引用未加载到子对象(DiscountLevel)上,所以我尝试加载它:

if(!this.ConditionReference.IsLoaded) this.ConditionReference.Load();
Run Code Online (Sandbox Code Playgroud)

但是这引发了以下异常:

无法加载实体引用,因为它未附加到objectcontext

因此,如果我尝试将现有子对象(DiscountLevel)附加到对象上下文(然后加载父引用):

context.AttachTo("tblDiscountLevel", this);
Run Code Online (Sandbox Code Playgroud)

我得到以下异常:

ObjectStateManager中已存在具有相同键的对象.现有对象处于Detached状态.如果对象处于添加状态,则只能再次将其添加到ObjectStateManager.

我觉得我首先做错了什么,但我无法弄清楚是什么.因此,非常感谢对此主题的每一个帮助.如果您需要其他信息,请告诉我们!

Rap*_*ber 1

我偶然发现了这个问题,它不需要对上面的代码做任何事情:DiscountLevel 中的各种覆盖的 OnChange 方法中有一些计算,如果调用得太早就会失败 - 在这种情况下,在初始加载时数据库。这导致 Child 对象无法正确初始化 - 看起来就像根本没有从外部加载一样。

实现一个简单的 bool 变量来抑制初始加载时 OnChange 方法的执行,使一切按预期工作。可能有一个更优雅的解决方案,具有实体框架提供的功能,但这对我有用。