1

だから私はEntity Framework Code Firstを使用しています(したがって.edmxはありません)ソフトデリートを行うためのbool IsEnabledを持つ基本エンティティクラスがあります

リポジトリ パターンを使用しているため、リポジトリに対するすべてのクエリを IsEnabled で除外できます。

ただし、リポジトリを使用して IsEnabled である MyType を取得するたびに、MyType.Items を遅延読み込みすると、Items を有効にできない可能性があります。

おそらくEF Fluentを使用して、テーブルでフィルタリングを行う方法を説明する方法はありますか?

アップデート:

Dbset がある場合

public class UnitOfWork : DbContext
    {
private IDbSet<MyObj> _MyObj;
public IDbSet<MyObj> MyObjs
        {
            get { return _MyObj ?? (_MyObj = base.Set<MyObj>()); }
        }
}

DbContext に DbSet をフィルター処理するように指示する方法はありますか?

4

3 に答える 3

4

いいえ、遅延読み込み用のフィルターを定義する方法はありません (また、 を使用した熱心な読み込み用でもありませんInclude)。ナビゲーション コレクションに項目のみを設定したい場合IsEnabledtrue、明示的な読み込みなど、それに応じてクエリを形成することしかできません。

context.Entry(parent).Collection(p => p.Items).Query()
    .Where(i => i.IsEnabled)
    .Load();

これにより、有効な項目のみが のItemsコレクションに取り込まれます。parent

編集

負け戦の悪い知らせを伝え、頭を打ちのめされたような気がします。Entity Framework が必要な機能を備えていない場合があるとは信じがたいかもしれません。あなたを説得するチャンスを増やすために、私は権威からの引用を追加します, ジュリー・ラーマン:

Entity Framework での一括読み込みも遅延/遅延読み込みも、返される関連データをフィルター処理したり並べ替えたりすることはできません。

于 2012-03-06T20:40:05.907 に答える
1

まだまだ可能のようです。興味がある場合は、Wiktor Zychlaのブログ投稿 を参照してください。ここで、彼はソフト削除の問題に対する解決策を提供しています。

于 2014-03-26T12:39:00.300 に答える
0

このhttp://blogs.claritycon.com/blog/2012/01/25/a-smarter-infrastructure-automatically-filtering-an-ef-4-1-dbset/基本的に、私が探していたものを達成する方法を定義しています.

基本的に、FilteredDbSet を作成し、すべての DbContext IDbSet がそれを返すようにします。

于 2012-03-08T18:17:27.767 に答える