我在同一个 SQL Server 上将几个事务包装到 2 个不同的数据库中度过了愉快的时光。我最初在访问网络 DTC 时遇到问题,我解决了这个问题。现在,我继续得到的错误是“与底层事务管理器的通信失败”。
我们在数据库中有一些客户资料,当这些资料过时时,我们希望将它们移动到“存档”数据库进行存储。移动只是(幽默的斜体)将它们添加到存档数据库并从主/实时数据库中删除它们。我为每个数据库都有一个 DataContext。下面的代码在尝试使用第二个 DataContext 时执行 Add,然后在 Delete 上出现错误。我只使用 LINQ 几个月,过去几天我一直在搜索文章。我想知道我的代码是否有问题,或者 DTC 是否仍然存在未正确配置的内容?
我们在 VMware 上运行我的工作站和服务器。- 工作站是 Windows 7 SP1 - 服务器是 Windows 和 SQL Server 2008R2
“移动”的常规:
private int MoveProfileToArchiveDB( int iProfileId )
{
int rc = RC.UnknownError;
// get new Archive profile object
ProfileArchive.ProfileInfo piArchive = new ProfileArchive.ProfileInfo();
// 'Live' DataContext
using ( ProfileDataContext dbLive = new ProfileDataContext() )
{
// get Live profile
ProfileInfo piLive = ProfileInfo.GetProfile( dbLive, iProfileId );
// copy Live data to Archive profile object... including the id
ProfileArchive.ProfileInfo.CopyFromLive( piLive, piArchive, true );
}
bool bArchiveProfileExists = ProfileArchive.ProfileInfo.ProfileExists( piArchive.id );
// make the move a transaction...
using ( TransactionScope ts = new TransactionScope() )
{
// Add/Update to Archive db
using ( ProfileArchiveDataContext dbArchive = new ProfileArchiveDataContext() )
{
// if this profile already exists in the Archive db...
if ( bArchiveProfileExists )
{
// update the personal profile in Archive db
rc = ProfileArchive.ProfileInfo.UpdateProfile( dbArchive, piArchive );
}
else
{
// add this personal profile to the archive db
int iArchiveId = 0;
piArchive.ArchiveDate = DateTime.Now;
rc = ProfileArchive.ProfileInfo.AddProfile( dbArchive, piArchive, ref iArchiveId );
}
// if Add/Update was successful...
if ( rc == RC.Success )
{
// Delete from the Live db
using ( ProfileDataContext dbLive = new ProfileDataContext() )
{
// delete the personal profile from the Profile DB
rc = ProfileInfo.DeleteProfileExecCmd( dbLive, iProfileId ); // *** ERROR HERE ***
if ( rc == RC.Success )
{
// Transaction End (completed)
ts.Complete();
}
}
}
}
}
return rc;
}
笔记:
- 我有几种不同的删除方法,它们都在 TransactionScope 之外工作。
- ProfileInfo 是主要的配置文件表,对于 Live 和 Archive 数据库大致相同。
任何帮助是极大的赞赏!非常感谢...