我在实体框架4中加载对父对象的引用时遇到了麻烦。由于延迟加载,对象(条件)的引用未加载到子对象(DiscountLevel)上,所以我尝试加载它:
if(!this.ConditionReference.IsLoaded) this.ConditionReference.Load();
但这引发了以下异常:
无法加载实体引用,因为它未附加到objectcontext
因此,如果我尝试将现有子对象(DiscountLevel)附加到对象上下文(然后在之后加载父引用):
context.AttachTo("tblDiscountLevel", this);
我得到以下异常:
ObjectStateManager中已存在具有相同键的对象。现有对象处于Detached状态。如果对象处于添加状态,则只能再次添加到ObjectStateManager。
我觉得我首先做错了什么,但我无法弄清楚是什么。因此,非常感谢对此主题的每一个帮助。如果您需要其他信息,请与我们联系!
答案 0 :(得分:1)
我偶然发现了这个问题并且没有对上面的代码做任何事情:在DiscountLevel中的各种覆盖的OnChange方法中有一些计算如果它们被过早调用则会失败 - 在这种情况下就是从DB初始加载。这导致Child对象未正确初始化 - 看起来好像没有从外部加载。
实现一个简单的bool变量,该变量在初始加载时强制执行OnChange方法,这使得一切都按预期工作。可能有一个更优雅的解决方案,其中包含Entity Framework提供的功能,但这对我有用。