データベース アクセスに Linq to SQL を使用する 2 つの C# Winform アプリケーションを使用しています。データベースへのアクセスとクエリはすべて、これらのアプリケーションの両方で参照および使用される DLL プロジェクトに存在します。最初のアプリケーションは、会計アプリケーションと SQL サーバー データベースの間でデータを同期します。2 番目のアプリケーションは、同じデータベース内のレコードの読み取り、書き込み、および更新を行います。現在、DataContext は、プログラムが終了するまでどちらのアプリケーションでも破棄されません。したがって、アプリケーション 1 (外部アプリと SQL DB の同期) とアプリケーション 2 (SQL DB の作成、読み取り、更新) はそれぞれ、コンテキストと DAO を含むデータベース ライブラリへの参照を持っています。DB アクセスが初めて必要になったときに、コンテキストのインスタンスがシングルトン内でインスタンス化されます。私が遭遇した例外とそれを再現する手順は以下のとおりです。
1) アプリケーション 1 を起動します。 2) アプリケーション 2 を起動します。 3) アプリケーション 1 を実行します。このアプリケーション 1 は、外部会計システムに基づいて SQL データベースのレコードを基本的に更新します。4) アプリケーション 1 によって変更されたレコードの 1 つを更新しようとする
以下の例外の列のマッピングは次のとおりです。
<Column Name="TimeStamp" Type="System.Data.Linq.Binary" DbType="rowversion NOT NULL" CanBeNull="false" IsVersion="true" />
また、更新チェックは決してしないように設定されています。より頻繁に DC を処分する方が良い設計かもしれないことは理解していますが、顧客がこのアプリケーションを使用しているため、それは当面の選択肢ではありません。この問題を解決する方法はありますか?
03/14/2013 15:18:08 Error BEN-LAPTOP Scribble.Database.Utilities.Domain.Persistence.Repository`1.SaveAll System.Collections.ListDictionaryInternal
03/14/2013 15:18:08 Error BEN-LAPTOP Scribble.Database.Utilities.Domain.Persistence.Repository`1.SaveAll Value of member 'TimeStamp' of an object of type 'Boat' changed.
A member that is computed or generated by the database cannot be changed.
03/14/2013 15:18:08 Error BEN-LAPTOP Scribble.Database.Utilities.Domain.Persistence.Repository`1.SaveAll at System.Data.Linq.ChangeProcessor.CheckForInvalidChanges(TrackedObject tracked)
at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
at Scribble.Database.Utilities.DomainClassesDataContext.Submit(RefreshMode refreshMode) in C:\Aaron\Dev\ScribbleUtilityProjects\Scribble.Database.Utilities\DomainClasses.cs:line 42
at Scribble.Database.Utilities.DomainClassesDataContext.SubmitOverwriteDatabase() in C:\Aaron\Dev\ScribbleUtilityProjects\Scribble.Database.Utilities\DomainClasses.cs:line 19
at Scribble.Database.Utilities.Domain.Persistence.Repository`1.SaveAll() in C:\Aaron\Dev\ScribbleUtilityProjects\Scribble.Database.Utilities\Domain\Persistence\Repository.cs:line 79
03/14/2013 15:18:08 Error BEN-LAPTOP MarineService.GlobalCollections.showAndLogErrors Value of member 'TimeStamp' of an object of type 'Boat' changed.
A member that is computed or generated by the database cannot be changed.
03/14/2013 15:18:08 Error BEN-LAPTOP MarineService.GlobalCollections.showAndLogErrors at Scribble.Database.Utilities.Domain.Persistence.Repository`1.SaveAll() in C:\Aaron\Dev\ScribbleUtilityProjects\Scribble.Database.Utilities\Domain\Persistence\Repository.cs:line 101
at Scribble.Database.Utilities.Domain.Persistence.Repository`1.UpdateEntity(T entity, Boolean attach) in C:\Aaron\Dev\ScribbleUtilityProjects\Scribble.Database.Utilities\Domain\Persistence\Repository.cs:line 50
at MarineService.Tests.AddWorkOrderForm.SaveWorkOrder() in C:\Aaron\Dev\ScribbleApplicationProjects\PureService\AddWorkOrderForm.cs:line 1638