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()問題は、LINQ to Entities で Reflection メソッド ( 、GetProperty()、 )を使用しようとしGetValue()ていて、それが認識されないことです。LINQ クエリ内で使用できるメソッドは、クエリ プロバイダーがサポートするものに限定されます。LINQ to Entities の場合は、比較的簡単に SQL に変換できるものがほとんどです。

残念ながら、この方法で ID を照合することはできません。によって指定されたエンティティ型の主キーが単一の列を持ち、正しい型で.Find(id)ある限り、使用は機能しますが、場合によっては機能する場合でも、非常に脆弱なアプローチになります。Tid

シナリオをもう少し詳しく説明すると、人々は別のアプローチを取るための良い提案をするかもしれません. なぜこれを一般的にしたいのか説明できますか?DbContext関心のあるエンティティの種類を知らずに、自分に対してクエリを実行したいというのはかなり珍しいことです。

于 2013-05-19T05:05:44.593 に答える