ユーザーが ASP Web フォームを使用してページを送信すると、多くのストアド プロシージャが実行されるシステムで、非常に複雑な問題が発生します。関連するテーブルから特定のアイテムを更新または削除しますが、これはすべてストアド プロシージャで発生するため、linq to sql はこのロジックを認識しないため、キャッシュは削除されたアイテムと共にそこに残ります。
私が見ている問題は、更新されている複合キーベースのテーブルにあるため、ストアドプロシージャを介してすべてのコンテンツが削除され、アイテムが再作成され、新しい値で挿入されますが、エンティティが次のように見えると仮定すると:
public class SomeCompositeEntity
{
public long UserId {get;set;}
public smallint ActionTypeId {get;set;}
public int ActionValue {get;set;}
}
したがって、この場合、それらのうち 10 個があり、3 個を更新した場合、それらはすべてこのストアド プロシージャを介して削除され、その後再作成されます。そのうち 7 個は既存のものと同一であり、3 個は同じ ID ですが異なる値です。
問題は、削除は DB スペースでのみ発生するため、linq はこれを認識しないため、これらのエンティティを linq から sql に保存しようとすると、DuplicateKeyException で爆発しますが、これは正しいことです。
したがって、DuplicateKeyException をキャッチし、エンティティを取得して linq に sql に通知し、DB からの変更を上書きしてリフレッシュするように指示した場合、オブジェクトが削除されている場合、キャッシュからオブジェクトが削除されますか? ドキュメントはそれについて明確ではないので?
私はストアドプロシージャと他の多くの複雑なプロセスを削除したいと思っていますが、クライアントは、それが何らかの形で終わりを引き起こす場合に備えて変更できないと断固として主張しています...このシナリオをどのように処理するかについてのアイデアは素晴らしいでしょう。