エンティティ フレームワーク 4.2 で汎用リポジトリと作業単位パターンを利用するデータ アクセス ソリューションを開発中。異常な動作が見られます。リポジトリを汎用にするために、次のように DbContext の Set メソッドを利用しました。
public class MyGenericRepository<T>
{
protected readonly IDbContext context;
public virtual IEnumerable<T> FindBy(Func<T, bool> predicate)
{
return context.GetDbSet<T>().Where(predicate).First();
}
}
IDbContext は次のようになります。
public interface IDbContext
{
void Commit();
void Attach<T>(T obj) where T : class;
void Add<T>(T obj) where T : class;
DbSet<T> GetDbSet<T>() where T : class;
bool Remove<T>(T item) where T : class;
}
DbContext クラスは、IDbContext を次のように実装します。
public partial class MyEntities : IDbContext
{
public DbSet<T> GetDbSet<T>() where T : class
{
return this.Set<T>();
}
}
repository.FindBy(c => c.CompanyId == 45) を実行すると、Sql Profiler はクエリにフィルターが含まれていないことを示します(company_id = 45)。クエリは Select * を実行します。
フィルターが存在することを期待して、調査を開始し、これに出くわしました。
http://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/7d6705ac-f875-4c89-960b-842be6f6e5ed および EF DbContext.Set<T> フィルター処理されたレコードのみ
これらのスレッドは私の思考プロセスを確認しますが、結果は異なります. 解決策はありますか?
ありがとう。