N-TierデザインにSqlにLinqを収めようとしています。私はデータコンテキストにオブジェクトを付加するときに元の値を供給して並行性を実装しています。 SubmitChangesを呼び出して、SQL Serverプロファイラで生成されたスクリプトを観察すると、それらが正しく生成されていることがわかります。これらは、すべてのオブジェクトのプロパティをチェックするwhere節(UpdateCheck.Alwaysですべてがマークされています)を含みます。Linq to Sql:スローされないChangeConflictException
結果は期待どおりです。つまり、更新時に行が更新されたり、削除時に削除されたりする行はありません。しかし、私は何の例外もありません。これはChangeConflictExceptionをスローするはずですか?
私は実行しているテストの設計とフローを分かりやすくするために、WsHttpBindingを使用してWCF経由でお互いに話すクライアントコンソールとサービスコンソールがあります。
- クライアントは
- サービスは、DataContextのをインスタンス化するデータを取得し、コンテキストを破棄し、クライアントにデータを返すサービスからのデータを要求します。
- クライアントは返されたデータを変更します。
- クライアントは、変更されたデータの更新をサービスから要求します。
5a。サービスはデータコンテキストをインスタンス化し、オブジェクトを接続します。
5b。私は変更を競合させるために、実行を一時停止し、データベース内の値を変更します。
5c SubmitChangesサービスコール。あなたが見ることができるように、public void UpdateEntities(ReadOnlyChangeSet<Entity> changeSet) { using (EntityDataContext context = new EntityDataContext()) { if (changeSet.AddedEntities.Count > 0) { context.Entities.InsertAllOnSubmit(changeSet.AddedEntities); } if (changeSet.RemovedEntities.Count > 0) { context.Entities.AttachAll(changeSet.RemovedEntities, false); context.Entities.DeleteAllOnSubmit(changeSet.RemovedEntities); } if (changeSet.ModifiedRecords.Count > 0) { foreach (var record in changeSet.ModifiedRecords) { context.Entities.Attach(record.Current, record.Original); } } // This is where I pause execution and make changes to the database context.SubmitChanges(); } }
私は原稿を変更を追跡し、維持するために、いくつかのクラスを使用しています:
は、ここで明確にするためビットをクリーンアップステップ5のコード、です。
助けてください。
EDIT:挿入に問題はありません。私は完全性のためにInsertAllOnSubmitを呼び出すコードだけを含んでいます。