我正在使用 Linq to Entities 和 Entity Framework 编写查询。我的应用程序使用两个数据库。由于客户需求,跨数据库不是一个选项。
假设MyEntity
驻留在第一个数据库中(所以它在一个 EF 模型上)并且它引用了第二个数据库中的一个实体SecondDBEntity
(所以它在另一个 EF 模型上),它有一个复合键。现在,假设我想检索所有MyEntity
引用一组SecondDBEntity
(在我们的示例中,具有键 [1, 1]、[1, 2] 和 [1, 3] 的实体)的所有引用。
我要生成的 SQL 是这样的:
SELECT *
FROM MyEntity
WHERE (MyEntity.ForeignKeyOne = 1 AND MyEntity.ForeignKeyTwo = 1)
OR (MyEntity.ForeignKeyOne = 1 AND MyEntity.ForeignKeyTwo = 2)
OR (MyEntity.ForeignKeyOne = 1 AND MyEntity.ForeignKeyTwo = 3)
然后我尝试了以下代码:
var setOfEntitiesToSearch = LetsAssumeThisIsAnIEnumerableOfSecondDBEntity;
return (from myEntity in DataContext.MyEntityList
where setOfEntitiesToSearch.Any(entityToSearch => entityToSearch.KeyOne == myEntity.ForeignKeyOne && entityToSearch.KeyTwo == myEntity.ForeignKeyTwo)
select myEntity).ToList();
这段代码编译得很好,但是当我执行时,它给了我错误:
"Unable to create a constant value of type 'SecondDBEntity'. Only primitive types or enumeration types are supported in this context."
我的主要问题是因为实体位于不同的数据库中。我可能在做一些愚蠢的事情,因为这是我正在尝试构建的一个非常常见的查询。所以,我相信我缺少 EF 中的一些功能,这将允许我创建这个查询。也许是一些 CompositeKey 结构?或者以某种方式混合这些 EF 模型?
提前致谢。