0

我正在尝试使用泛型将记录加载到我的 dbcontext 缓存中。我正在使用以下代码。

_Context.Set<T>().Where(R => (int)R.GetType().GetProperty("Id").GetValue(R) == id).Load();

此代码引发以下错误,我似乎无法弄清楚如何解决它。

System.NotSupportedException:LINQ to Entities 无法识别方法“System.Object GetValue(System.Object)”方法,并且此方法无法转换为存储表达式。

我正在做的事情是可能的还是有其他方法。

4

1 回答 1

4

问题是您试图将反射方法 ( GetType(), GetProperty(), GetValue()) 与 LINQ to Entities 一起使用,但它不理解它们。允许您在 LINQ 查询中使用的方法仅限于查询提供程序支持的方法,而在 LINQ to Entities 的情况下,主要是可以相对容易地转换为 SQL 的方法。

不幸的是,您将无法尝试以这种方式匹配 ID。.Find(id)只要 指定的实体类型的主键T具有单列并且是正确的类型,使用就可以工作id,但即使在某些情况下有效,这也将是一种非常脆弱的方法。

如果您再多描述一下您的场景,人们可能会对采用另一种方法提出一些好的建议。你能解释一下为什么你想通用地这样做吗?DbContext在不知道您感兴趣的实体类型的情况下想要对您执行查询是很不寻常的。

于 2013-05-19T05:05:44.593 回答