我在C#asp.NET MVC2中編寫一些合併功能。我也在使用Linq2SQL。Transactioncope可以通過多次呼叫到不同的服務嗎?
我有一個調用兩個服務MessageService和UserService的代碼塊。這兩方面都需要調用適當的存儲庫並對db進行修改。每個存儲庫都聲明它是自己的存儲庫實例,所以我認爲這會將以下代碼升級到DTC。代碼從AccountService調用,這是否會在這個級別上工作?在每個存儲庫的頂部聲明DataContext還是不好的做法,還是應該以某種方式傳遞對象?謝謝你提前
//Run the merge
try
{
using (TransactionScope scope = new TransactionScope())
{
// Update Messages to be owned by primary user
if (!_MessageService.UpdateCreatedById(MergeUser.UserID, CoreUser.UserID))
{
return false;
}
// Update Comments to be owned by primary user
foreach (var curComment in _MessageService.GetUserComments(MergeUser.UserID))
{
curComment.CreatedBy = CoreUser.UserID;
}
_MessageService.Save();
// Update Logins to be owned by primary user
foreach (var CurLogin in _UserService.GetLogins(MergeUser.UserID))
{
CurLogin.UserID = CoreUser.UserID;
}
_UserService.Save();
scope.Complete();
}
return true;
}
catch (Exception ex)
{
_ErrorStack.Add(ex.Message);
ErrorService.AddError(new ErrorModel("Portal", "WidgetRepository", ErrorHelper.ErrorTypes.Critical, ex));
return false;
}
所以我不應該通過稻田提到的服務/存儲庫之間的上下文? – Andrew 2010-06-23 08:25:35
TransactionScope不知道DataContext,它不需要知道DataContext。甚至在DataContext之前,TransactionScope已經存在。 – 2010-06-23 08:33:45