我将 EF5.0 与 SQL Server 2008 一起使用。我在同一个服务器实例上有两个数据库。我需要更新两个数据库上的表并希望它们是相同的事务。所以我使用了TransactionScope。下面是代码 -
public void Save()
{
var MSObjectContext = ((IObjectContextAdapter)MSDataContext).ObjectContext;
var AWObjectContext = ((IObjectContextAdapter)AwContext).ObjectContext;
using (var scope = new TransactionScope(TransactionScopeOption.Required,
new TransactionOptions
{
IsolationLevel = IsolationLevel.ReadUncommitted
}))
{
MSObjectContext.SaveChanges(SaveOptions.DetectChangesBeforeSave);
AWObjectContext.SaveChanges(SaveOptions.DetectChangesBeforeSave);
scope.Complete();
}
}
当我使用上面的代码时,事务被提升为 DTC。在互联网上搜索后,我发现这是由于两个不同的连接字符串/连接而发生的。但我不明白的是,如果我在一个数据库上编写一个存储过程来更新不同数据库(在同一台服务器上)中的表,则不需要 DTC。那为什么 EF 或 TransactionScope 将这个推广到 DTC 呢?有没有其他解决方法?
请指教
提前致谢
赛