我有一个TPM_TASKS
包含所有任务的表,以及一个TPM_USER
包含所有用户的表。然后我有一个名为的表TPM_USERTASKS
,其中包含一个UserId
并TaskId
存储一个任务分配给一个用户。
我正在尝试选择分配给给定TPM_USER
实体的所有任务。到目前为止,我已经尝试过:
TPM_USER user = UserManager.GetUser(context, UserId); //Lookup the user in the DB
var tasks = (from t in context.TPM_TASK.Include("TPM_USER")
where t.TPM_USER.Contains<TPM_USER>(user)
select t);
但是,当我尝试迭代时,我得到了运行时异常:
无法创建“Entity.TPM_USER”类型的常量值。此上下文仅支持原始类型(“例如 Int32、String 和 Guid”)。
我相信它不喜欢我将 TPM_USER 对象传递到Contains()
. 这可能是有道理的,因为它必须生成一个嵌套的 SELECT 语句而不是一个IN
子句,这可能是 EF 无法做到的。但是,肯定有办法进行这样的查询,对吧?
注意:如果你很聪明,你可能会问我为什么我不只是查询TPM_USERTASKS
然后加入匹配TPM_TASK
。嗯,我很想这样做。但是,我整个上午都在尝试让 EF 生成 TPM_USERTASK 模型,但它根本不会。该表显示在模型存储中,我可以针对它定义关系。它没有出现在我可以从数据库中添加或刷新的实体列表中,我什至尝试删除整个 .EDMX 文件并重新创建它。我猜在多对多关系中使用的东西也不能是一个独立的实体?