【发布时间】:2011-06-02 03:57:28
【问题描述】:
如何在单独的程序集中使用两个 EDMX,但在相同的数据库之上,
要创建同时使用它们的 linq-to-entities 查询?
例如
这就是我想要做的:
using (var context1 = new Entities1())
{
using (var context2 = new Entities2())
{
var items2 = context2.Items.Where(item2 => item2.Color == "Red");
var query = context1.Items.Where(item =>
items2.Any(item2 => item2.PainterId == item.PainterId));
}
}
> 这会导致 NotSupportedException。
消息:“指定的 LINQ 表达式包含对与不同上下文关联的查询的引用。”
> 即使将 Entities2 替换为 Entities1,也会引发此异常
(即使两个上下文都来自同一个 EDMX)并且都使用相同的连接字符串。
为了比较,另一方面,这有效并导致单个 SQL 语句:
using (var context1 = new Entities1())
{
var items2 = context2.Items.Where(item2 => item2.Color == "Red");
var query = context1.Items.Where(item =>
items2.Any(item2 => item2.PainterId == item.PainterId));
}
约束:
我的意图是使用两个支持设计器的 EDMX - 不会以破坏设计器或在从数据库更新时被覆盖的方式入侵 EDMX。
EDMX #1 不知道 EDMX #2(但 #2 可以知道 #1)。
我希望将结果转换为单个 SQL 查询,而不是将结果从第一部分读取到内存,然后将它们作为第二部分查询的输入返回到数据库。
相关,但不是我要找的:
【问题讨论】:
标签: entity-framework entity-framework-4 linq-to-entities multiple-schema