当记录从两个不同的应用程序更新时,Linq到SQL异常

本文关键字:更新 应用程序 Linq 异常 SQL 记录 两个 | 更新日期: 2023-09-27 18:03:53

我正在使用两个使用Linq to SQL进行数据库访问的c# Winform应用程序。我所有的数据库访问和查询都存在于一个DLL项目中,该项目被这两个应用程序引用和使用。第一个应用程序同步记帐应用程序和SQL server数据库之间的数据。第二个应用程序读取、写入和更新同一数据库中的记录。目前,在程序退出之前,DataContext不会在任何一个应用程序中被处理。因此,应用程序1(将外部应用程序与SQL DB同步)和应用程序2(创建、读取、更新SQL DB)都有一个对数据库库的引用,其中包含上下文和dao。当它们第一次需要DB访问时,上下文的实例在Singleton中实例化。下面是我遇到的异常和重新生成它的步骤。

1)启动应用程序12)启动应用程序3)运行应用程序1,该应用程序主要更新基于某些外部会计系统的SQL数据库中的记录。4)尝试更新应用程序1修改的其中一条记录

下面异常中列的映射为:

<Column Name="TimeStamp" Type="System.Data.Linq.Binary" DbType="rowversion NOT NULL" CanBeNull="false" IsVersion="true" />

同时,更新检查设置为never。我意识到更频繁地处理直流可能是一个更好的设计,但是,这不是一个立即的选择,因为客户正在使用这个应用程序。有办法解决这个问题吗?

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

当记录从两个不同的应用程序更新时,Linq到SQL异常

你不希望你的上下文是单例的。来自MSDN上的DataContext页面:

通常,DataContext实例被设计为持续一个"单元"工作",无论您的应用程序如何定义该术语。DataContext是重量轻,制作成本不高。典型的LINQ to SQL应用程序在方法范围内创建DataContext实例或作为表示相关类的逻辑集的短寿命类的成员数据库操作。