【问题标题】:Entity Framework 4 Loading Reference ExceptionEntity Framework 4 加载引用异常
【发布时间】:2015-06-01 21:11:24
【问题描述】:

我在实体框架 4 中加载对父对象的引用时遇到问题。由于延迟加载对父对象的引用 (Condition) 未加载到子对象 (DiscountLevel),所以我尝试加载它与:

if(!this.ConditionReference.IsLoaded) this.ConditionReference.Load();

但这会引发以下异常:

无法加载实体引用,因为它未附加到对象上下文

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

context.AttachTo("tblDiscountLevel", this);

我得到以下异常:

ObjectStateManager 中已存在具有相同键的对象。现有对象处于分离状态。只有处于添加状态的对象才能再次添加到 ObjectStateManager 中。

我觉得我首先做错了什么,但我不知道是什么。因此,非常感谢有关此主题的所有帮助。如果您需要更多信息,请告诉我!

【问题讨论】:

  • 你试过Include查询中的父对象吗?见:stackoverflow.com/questions/19319116/…
  • 我已尝试包含父级,但不会加载参考。也许我做错了什么...context.tblDiscountLevel.Include("Condition").Where(lv => lv.LevelDiscountID == this.LevelDiscountID ).ToList()
  • 您使用的是code first 还是edmx?首先使用代码时,父级的导航属性应为virtual,并包含一些命名约定以使其开箱即用。如果您使用的是 edmx,我的经验不足以在这里为您提供帮助。
  • 我正在使用 edmx 文件:/ 我查了一下,父导航属性不是虚拟的。改变也没有任何区别

标签: c# entity-framework


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 2011-07-13
    • 1970-01-01
    相关资源
    最近更新 更多