当前位置: 首页 > 编程语言 > C#

错误–具有多个数据库连接共享的LINQ-TransactionScope

时间:2023-04-10 18:43:48 C#

错误–具有多个数据库连接的LINQ/TransactionScope我很难将多个事务包装到两个不同的数据库中。我最初遇到网络DTC访问问题,我解决了。现在,我继续得到的错误是“与底层事务管理器的通信失败”。我们在数据库中有一些客户资料,当这些资料过时时,我们希望将它们移至“存档”数据库进行存储。将它们添加到存档数据库并从主/实时数据库中删除它们的操作很简单(幽默斜体)。每个数据库都有一个DataContext。下面的代码执行添加,然后在尝试使用第二个DataContext时在删除时出现错误。我只使用LINQ几个月,过去几天我一直在搜索文章。我想知道我的代码是否有任何问题,或者DTC是否仍未正确配置或???我们在VMware上运行我的工作站和服务器。–工作站是Windows7SP1–服务器是Windows和SQLServer2008R2“移动”的常态:privateintMoveProfileToArchiveDB(intiProfileId){intrc=RC.UnknownError;//获取新的存档配置文件对象ProfileArchive.ProfileInfopiArchive=newProfileArchive.ProfileInfo();//'Live'DataContextusing(ProfileDataContextdbLive=newProfileDataContext()){//获取实时配置文件ProfileInfopiLive=ProfileInfo.GetProfile(dbLive,iProfileId);//将实时数据复制到存档配置文件对象...包括idProfileArchive.ProfileInfo.CopyFromLive(piLive,piArchive,true);}boolbArchiveProfileExists=ProfileArchive.ProfileInfo.ProfileExists(piArchive.id);//使移动成为事务...使用(TransactionScopets=newTransactionScope()){//添加/更新到存档数据库使用(ProfileArchiveDataContextdbArchive=newProfileArchiveDataContext()){//如果此配置文件已存在于存档中db...if(bArchiveProfileExists){//更新th存档中的个人资料dbrc=ProfileArchive.ProfileInfo.UpdateProfile(dbArchive,piArchive);}else{//将此个人资料添加到存档dbintiArchiveId=0;piArchive.ArchiveDate=DateTime.Now;rc=ProfileArchive.ProfileInfo.AddProfile(dbArchive,piArchive,refiArchiveId);}//如果添加/更新成功...if(rc==RC.Success){//使用(ProfileDataContextdbLive=newProfileDataContext())从Livedb中删除{//从ProfileDB中删除个人资料rc=ProfileInfo.DeleteProfileExecCmd(dbLive,iProfileId);//***ERRORHERE***if(rc==RC.Success){//交易结束(完成)ts.Complete();}}}}}返回rc;注意:我有几种不同的删除方法,它们都在TransactionScope之外工作ProfileInfo是主要的配置文件表,对于Live和Archive数据库大致相同。任何帮助是极大的赞赏!非常感谢...我决定将此作为答案,而不是继续交叉评论。SQLServer2008比SQLServer2005更智能,可以自动检测一个事务中的所有数据库连接是否指向同一个物理数据库。如果是这种情况,事务仍然是本地事务,不会升级为分布式事务。不幸的是,有一些注意事项:由于您的连接(来自所使用的两个数据上下文)指向不同的数据库,即使在SQLServer2008上,您的TransactionScope也将升级为分布式事务。至少有两种方法可以让你的应用程序进入DTC:现在,如果你按照上面提到的文章修复MSDTC通信,你的代码应该可以正常工作,但我仍然认为这种归档不应该在客户端代码中运行EF发生。那里有更好的工具,SSIS就是一个很好的例子。运行SSIS的夜间计划作业将更有效地传输这些未使用的配置文件。以上就是C#学习教程:Error–LINQ/TransactionScopewithmultipledatabaseconnections分享的全部内容,如果对你有用还需要进一步了解C#学习教程,希望大家多多关注~本文来自网络收集,不代表侵权,请点击右边联系管理员删除。如需转载请注明出处: