【问题标题】:LINQ expression that contains references to queries that are associated with different contexts包含对与不同上下文关联的查询的引用的 LINQ 表达式
【发布时间】:2011-10-24 20:15:18
【问题描述】:

我有这个问题:

var list = (from t1 in context1.SomeTable
            join t2 in context2.SomeTable on t1.ID equals t2.ID
            where //some where clause
            select new { t1.SomeField, t2.SomeField }).ToList());

当这个查询尝试执行时我会得到这个错误:

指定的 LINQ 表达式包含对与不同上下文关联的查询的引用。

  1. 为什么 LINQ to Entities 不允许这样做?
  2. LINQ to Entities 还可以通过其他方式实现吗?
  3. 有什么办法可以解决这个问题?

【问题讨论】:

  • 您能用伪代码解释一下您希望如何执行查询吗?服务器上应该发生什么以及代码中本地应该发生什么?
  • 在我的例子中,我刚刚拆分了我的数据库中的表、SystemContext 中的系统表和 Applicationcontext 中的其余表。所以它仍然在同一个服务器上,同一个连接,只是 2 个不同的实体模型。
  • 所以你把它们放在两个不同的上下文中,但是你假设系统应该意识到上下文是相同的?您是否希望整个查询在服务器端运行?如果是这样,我假设您应该将所有查询相关表包含在同一上下文中。

标签: c# linq entity-framework-4 linq-to-entities


【解决方案1】:

我想这是因为您正在构建的语句在后台转换为 SQL 并在数据库上运行。因为不同的上下文可能来自不同的数据库甚至不同的服务器,所以不能保证在查询服务器时上下文2中的数据对上下文1可用。

您可以从每个上下文返回数据并转换为 IEnumerable,然后执行标准的 linq 查询,但是您有明显的数据传输和内存处理开销,否则数据库引擎会执行这些开销。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-30
    • 2011-11-12
    • 2021-11-12
    • 2018-05-09
    • 2016-12-02
    相关资源
    最近更新 更多