【问题标题】:Entity Framework - get related entities from List<T>实体框架 - 从 List<T> 获取相关实体
【发布时间】:2012-08-29 17:45:26
【问题描述】:

我正在使用带有 DbContext 的 EF4.3。

我有存储在 cookie 中的实体。

当用户返回站点时,我目前将 cookie 值解析为列表,但是,实体“BookmarkedDeals”具有“Deal”的导航属性,我想将列表设为 IQueryable,因此我可以简单地附加导航属性要么是急切加载,要么是延迟加载

有一个清单,这是我最初尝试的;

List<BookmarkedDeals> bd = // populate it from cookie

var query = bd.AsQueryable().Include("Deal");

但是 Deal 为空。

有人知道如何实现吗?

【问题讨论】:

  • 您必须使用新的 DbSet 查询您的数据库: context.BookmarkedDeals.Include("Deal")

标签: .net linq entity-framework entity-framework-4.3


【解决方案1】:

您的“从 cookie 填充”代码需要返回 IQueryable&lt;BookmarkedDeals&gt; 而不是将其转换为列表。那,或者您需要将对 .Include("Deal") 的调用直接添加到该代码中。

在 List 对象上执行AsQueryable() 或任何其他本身没有实时连接到数据库的东西将永远不会起作用。

编辑:我没有完整阅读您的问题。如果实体本身存储在 cookie 中,它就无法工作。我会将 ID 存储在 cookie 中,并根据这些 ID 执行包含“交易”的查询。

【讨论】:

  • 感谢您的建议,我会试一试的。
  • 这就是我目前所在的位置。公平地说,BookmarkedDeals 仅包含 ID 和日期。它们既是 cookie 条目又是 db 实体的原因是因为匿名用户获得了功能,但没有被绑定,成员驻留在 db 中。
【解决方案2】:

您是否急于在将列表放入 cookie 之前加载 nav 属性?如果没有,你应该从那个开始。

或者,如果将 nav 属性附加到上下文,则可以加载它。

        var db = new YourContext();
        foreach (var deal in bd)
        db.Entry(deal).Reference(b => b.Deal).Load();

【讨论】:

  • System.InvalidOperationException:无法为属性“Deal”调用成员“Load”,因为上下文中不存在“BookmarkedDeal”类型的实体。要将实体添加到上下文中,请调用 DbSet 的 Add 或 Attach 方法。
猜你喜欢
  • 2011-12-01
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多