如何在单独的程序集中但在相同数据库之上使用两个 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 查询,而不是将结果从第一部分读取到内存,然后将它们作为第二部分查询的输入返回到数据库。
相关,但不是我要找的: