私は理解できない奇妙な振る舞いをしています。IEnumerable/IQueryable拡張による奇妙な動作(遅延読み込みなし)
以下の2つの方法は、明らかにIQueryableの場合と同じように動作しますが、間違っていると思われます。
最初にIQueryable(オブジェクトはIQueryableとして明示的に使用されるエンティティフレームワークのDbSetです)を呼び出すと、レイジーローディングを使用しないように見えます(データベースでスキャンを実行します)。私が同じオブジェクトを使って2番目のメソッドを呼び出すと、それは私が望むように動作しているように見えます(データベースに対してシークを実行します)。
ので、二つの質問:
なぜこの出来事はありますか?
(IEnumerableを使用して)最も一般的な方法を「正しく」動作させることはできますか? (私はより多くの拡張機能を持っていると私は過負荷を回避し、ちょうどコピーペーストする以下のようなメソッド本体をしたいコードを複製したくないので)
私はSQL Server Expressの不利に働いEF 4.1を使用していますlist
以来2008データベース
public static TEntity GetByID<TEntity>(this IEnumerable<TEntity> list, long id) where TEntity : Identifiable
{
return list.SingleOrDefault(e => e.ID == id);
}
public static TEntity GetByID<TEntity>(this IQueryable<TEntity> list, long id) where TEntity : Identifiable
{
return list.SingleOrDefault(e => e.ID == id);
}
IEnumerable拡張メソッドは、望むように機能しません。 – hatchet