だからここに私の状況です:Entity Frameworkの、ソフト削除およびクエリ
は私のアーカイブされたデータの痕跡を保つことができるように私は、ソフトの削除IsDeleted
フラグを使用して、テーブル内の一部の行です。私はObjectContext
のSaveChanges
ステートメントを無効にすることでそうしています。
質問は:すべてのクエリで&& !IsDeleted
を指定することなく、IsDeleted == false
を持つ行のみを選択するにはどうすればよいですか?
これを自分のコンテキストで直接指定する方法はありますか?
tkx! ActiveData
ビューの代わりに、ベース・テーブルからデータを読み込み、
CREATE VIEW dbo.ActiveData
AS
SELECT (list of columns)
FROM dbo.YourTable
WHERE IsDeleted = 0
そして、あなたのEDMXモデルに:
EFコードファーストまたはモデル最初:
は、詳細は以下を参照してください? – StriplingWarrior
フラグの代わりに、表を使用してください。削除されたテーブルの場合、PKはメインテーブルと同じPKになり、削除されたテーブルのPKはFKでメインテーブルに格納されます。あなたが削除されたレコードを持っていれば、そのレコードは削除されます。それから、ちょうど簡単な参加です。クエリのパフォーマンスは、ビットフラグを使用するよりも優れています。 –
@ JonRaynor:データベースは私の専門ではありませんが、ビットフラッグをチェックすることは、ジョインするよりもはるかに安価でなければならないと思います。特に、通常どの項目を知ることにもっと関心を持つので、 *削除されていないため、削除されたテーブルには存在しません。ビットフラグがクエリのパフォーマンスを傷つけている場合は、完全に別のテーブルを作成するよりもインデックスを優先します。 – StriplingWarrior