0

Entity Framework を使用している間、 SQL OUTPUT 句を使用して、データベースのレコードの履歴を保持したいと考えています。これを実現するには、EF で DELETE ステートメントの次の例を生成する必要があります。

Delete From table1
output deleted.*, 'user name', getdate() into table1_hist
Where field = 1234;

テーブル table1_hist には table1 と同じ列があり、アクションを実行したユーザーの名前とそれがいつ発生したかを格納する 2 つの列が追加されています。ただし、EF にはこの SQL Server の句をサポートする方法がないように思われるため、それを実装する方法がわかりません。

EF のソース コードを調べたところ、DELETEコマンドは内部静的メソッド内で作成されている(GenerateDeleteSql in System.Data.Entity.SqlServer.SqlGen.DmlSqlGenerator class)ため、クラスを拡張して必要な動作を追加することはできません。既存のコードに基づいて SQL Server プロバイダーを書き直す必要があるようですが、それは避けたいことです...

それで、私の質問は、これを行うための別のオプション (拡張機能など) があるかどうか、またはこのプロバイダーを書き直す必要があるかどうかです。

ありがとうございました。

4

1 に答える 1

2

どちらかを検討しましたか

  • ストアド プロシージャを使用してデータ ロジックをカプセル化する
  • データをキャプチャするための削除トリガー
  • 変更データ キャプチャ (エンタープライズ エディションのみ)
  • 実際にデータを削除するのではなく、データにフラグを設定して削除済みとしてマークするだけです。
于 2013-09-16T14:32:57.623 に答える