DB層にLLBLGen Proを使用しているプロジェクトを継承しています。DB モデルでは、エントリが削除されたときにフラグが必要です (DeletedDate は現在の時刻に設定されます)。最後のプログラマーはこの要件を無視し、アプリケーション全体で通常の削除を使用しました。
これを自動的に行うようにコード ジェネレーターを設定する方法はありますか、それとも必要なエンティティの各削除演算子をオーバーロードする必要がありますか?
DB層にLLBLGen Proを使用しているプロジェクトを継承しています。DB モデルでは、エントリが削除されたときにフラグが必要です (DeletedDate は現在の時刻に設定されます)。最後のプログラマーはこの要件を無視し、アプリケーション全体で通常の削除を使用しました。
これを自動的に行うようにコード ジェネレーターを設定する方法はありますか、それとも必要なエンティティの各削除演算子をオーバーロードする必要がありますか?
論理的な削除テーブルの削除時に INSTEAD OF トリガーを使用して、これを SQL Server 2005 に実装しました。トリガーは削除フラグを設定し、クリーンアップを実行します。このソリューションの優れた点は、データベースにアクセスするシステムによって発行された削除を正しく処理できることです。INSTEAD OF は SQL Server では比較的新しいものです。Oracle に相当するものがあることは知っています。
このソリューションは、O/R マッパーともうまく機能します。論理的に削除されたレコードを除外するビューを作成し、それらをマップしました。ビューは、すべてのレポートにも使用されます。
LLBLGenでカスタムタスクを作成して、エンティティを生成するときにそれらをオーバーライドすることができます。ウェブサイトで彼らのテンプレートスタジオとテンプレートの例をチェックしてください。
セルフサービスまたはアダプターを使用しているかどうかによって異なります。SS の場合、エンティティを削除するのではなく、フラグを設定するようにテンプレートを変更する必要があります。
アダプターの場合、DataAccessAdapter から継承し、削除メソッドをオーバーライドして、エンティティを削除するのではなく、フラグを設定できます。
ただし、すべてのクエリで「削除された」エンティティを除外する必要があり、「削除された」列の選択性がそれほど高くないためです(「削除されていない」レコードはすべてnullです-i'これがそれらの大部分になると思います) インデックスを作成してもあまり効果がありません.多くのテーブルスキャンが必要になります.