C# 实体框架4加载引用异常

C# 实体框架4加载引用异常,c#,entity-framework,C#,Entity Framework,我在实体框架4中加载对父对象的引用时遇到问题。由于延迟加载,对父对象(条件)的引用未加载到子对象(DiscountLevel)上,因此我尝试使用以下内容加载它: if(!this.ConditionReference.IsLoaded) this.ConditionReference.Load(); 但这会引发以下异常: 无法加载实体引用,因为它未附加到objectcontext 因此,如果我尝试将现有子对象(DiscountLevel)附加到对象上下文(然后加载父引用): 我得到以下例外情况

我在实体框架4中加载对父对象的引用时遇到问题。由于延迟加载,对父对象(条件)的引用未加载到子对象(DiscountLevel)上,因此我尝试使用以下内容加载它:

if(!this.ConditionReference.IsLoaded) this.ConditionReference.Load();
但这会引发以下异常:

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

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

我得到以下例外情况:

ObjectStateManager中已存在具有相同密钥的对象。现有对象处于分离状态。如果对象处于已添加状态,则只能再次将其添加到ObjectStateManager


一开始我觉得我做错了什么,但我不知道是什么。因此,我们非常感谢您在这个话题上的每一个帮助。如果您需要更多信息,请告诉我

我偶然发现了这个问题,它与上面的代码没有任何关系:Deffletvel中的各种Overwrited OnChange方法中有一些计算,如果调用得太早,就会失败——在这种情况下,是在DB的初始加载上。这导致子对象未正确初始化-看起来它根本不是从外部加载的


实现一个简单的bool变量,该变量禁止在初始负载上执行OnChange方法,从而使一切都按预期工作。实体框架提供的功能可能有一个更优雅的解决方案,但这对我很有效。

您是否尝试在查询中包含父对象?请参阅:我已尝试包含父对象,但无法加载引用。也许我做错了什么
context.tbldisuntlevel.Include(“条件”)。其中(lv=>lv.LevelDiscountID==this.LevelDiscountID)。ToList()
您是先使用
code
还是先使用edmx?首先使用代码时,父项的导航属性应为
virtual
,并包含一些命名约定,以使其开箱即用。如果您使用的是edmx,我的经验不足以帮助您。我使用的是edmx文件:/I我查找了它,并且父导航属性不是虚拟的。改变这一点也没有任何区别
context.AttachTo("tblDiscountLevel", this);