1

v4 Entity Framework をアプリケーションの新しいバージョンの一部として使用しています。このアプリケーションには、いくつかの重要な会計機能 (支払い処理、キャッシュ バランシング、不良小切手処理など) が含まれています。以前のすべてのアプリケーションでは、ポリシー (これは銀行/会計レベルのアプリケーションでは非常に一般的であると言われています)、すべてのお金の着信「監査証跡」を含むテーブルが少なくとも1つあり、新しいデータでのみ書き込むことができます。

言い換えれば、システムに入ってくる新しい情報は、新しいエンティティの作成をトリガーし、それは、私たちが持っていたデータ層オブジェクトの「挿入」操作を通過し、新しい行を基礎となるテーブルに書き込みます。データ レイヤーは、これらのエンティティの更新または削除アクションなしで意図的に実装されました。すべての変更は、新しく挿入された調整行として追跡されました。

EF を使用して同じ目標を達成する方法を探していますが、この場合は明らかに、EF が更新を許可しないようにする必要があります (単に関数を記述しないのではなく)。EF モデルのエンティティを「挿入のみ」として指定する方法はありますか?

タイトルで述べたように、これは、ストアド プロシージャを更新アクションではなく挿入アクションにマッピングすることで実現できることを知っています。次の 2 つの理由から、他のオプションが存在する場合はそれを探しています。

  1. ストアド プロシージャはまだありません。回避できる場合は、展開/アップグレード プロセスに別の要素を追加することは避けたいと考えています。
  2. このソリューションは、テーブルが特別であることを示すストアド プロシージャの「不在」に依存しています。「挿入のみ」が意図的にそのようになっているという決定的な主張に依存したソリューションを好むでしょう。
4

1 に答える 1

0

うん、最善の策は、モデル内の各 DbSet のゲッターに .AsNoTracking を追加することです。これは、EF がデータベースから取得したエンティティを追跡しないことを意味します (したがって、それらに対して書き戻しを実行しません)。また、パフォーマンスが向上するという追加のボーナスもあります。

すべての読み取りを強制的に読み取り専用にすることで、EF の更新パスを排除します。

AsNoTrackingに関する私の投稿、EF サイトのこの記事をご覧ください。

于 2012-04-30T20:04:11.357 に答える