我有一个服务级别的方法,它对数据库进行很少的更改,我希望它们使用事务控制。此类方法可以执行以下操作: - LINQ SubmitChanges() 功能 - 调用 StoredProcedures
组件用户可以将一组这样的基本操作组合成更大的东西。
我看到有一个不错的类 TransactinScope 并尝试使用它:
using (TransactionScope transaction = new TransactionScope())
{
content = repository.CreateBaseContent(content);
result = repository.CreateTreeRelation(content, parent.Id, name);
transaction.Complete();
}
public baseContent CreateBaseContent(baseContent content)
{
EntityContext.baseContents.InsertOnSubmit(content);
EntityContext.SubmitChanges();
return content;
}
public CreateTreeRelation (params)
{
// do StoredProcedure call here via LINQ
}
我的假设是在外层可以添加另一个级别的事务范围。相反,我遇到以下错误:
事务管理器已禁用对远程/网络事务的支持。(来自 HRESULT 的异常:0x8004D024)
我正在为 MS SQL 2005 和微软开发服务器使用相同的(Vista Ultimate)机器。从单元测试一切正常。TransactionScope 评论时相同。
我试图使用 DTC ( http://support.microsoft.com/kb/899191 ) 的安全性,当我设置接受所有入站和出站事务时,我收到以下错误消息:
对 COM 组件的调用已返回错误 HRESULT E_FAIL。
在调试过程中,我发现在 SubmitChanges 中,Linq Entity Context 有 Property Transaction IS NULL(!!),而 System.Transactions.Transaction.Current 有打开事务