我正在使用Entity Framework 5.0和MVC4。我有几个域名。他们每个人都有自己的DbContext(使用适当的表),存储库和服务。我还实现了UnitOfWork。
处理特定域的一个服务内的事务中的特定流很简单。我正在对表进行一些操作,最后我正在调用UnitOfWork.Save,它的行为与Transaction.Commit相同。
但是假设我有一个案例,我必须调用两个不同域的操作,这两个操作必须放在一个事务中。我可以从控制器访问域的服务,因此可以从那里调用此操作。目前我可以看到三种解决方案:
请告诉我您认为最好的选项。如果您有上述三项以外的任何内容,请告知我们。或者我的概念可能有问题?我的意思是域名和他们的数据库上下文?
答案 0 :(得分:0)
假设您的UnitOfWork实现支持.NET中的正常事务,您可以执行以下操作,并且他们应该注册当前正在运行的事务。
protected TransactionScope CreateTransactionScope()
{
var options = new TransactionOptions();
options.IsolationLevel = IsolationLevel.ReadCommitted;
options.Timeout = TransactionManager.MaximumTimeout;
return new TransactionScope(TransactionScopeOption.Required, options);
}
using (var scope = this.CreateTransactionScope())
{
// do operations with context 1
// do operations with context 2
scope.Complete();
}