【发布时间】:2013-09-09 07:32:01
【问题描述】:
我有 2 个数据库。
经理有公司表,基于这个值我必须创建一个新的数据库。
所以我正在使用 TransactionScope。我想知道以下是否正确?
这会回滚这两个更改吗?在两个数据库中是否发生错误?
using (TransactionScope ts = new TransactionScope())
{
try
{
using(var ManagerContext = new ManagerEntities(
ConnectionStringManager.GetManagerConnectionString()))
{
//Operations on Manager DB
// Create new Company and get NEWCOMPANYID
// -- Used to create new DB
}
using(var companyContext = new CompanyEntities(
ConnectionStringManager.GetCompanyConnectionString(
NEWCOMPANYID.ToString())))
{
//Create New Company DB
}
ts.Complete();
}
catch (Exception ex)
{
ts.Dispose();
}
}
【问题讨论】:
-
try-catch 是多余的,因为
using语句已经确保了TransactionScope的处置。 -
我不明白你的意思。如果 try{} 块中发生任何错误,我已经执行 ts.Dispose()
-
如果分布式事务协调器被激活,这将起作用(例如,参见luisrocha.net/2011/08/managing-transactions-with-entity.html)
-
@Matten 即使我使用两个单独的 DbContext 范围,我也必须激活分布式事务?
-
@DawoodAwan 不,你不需要
Dispose()- 这正是using所做的:它设置了一个try/finally,在ts上调用Dispose()(如果它不为空)。
标签: c# database entity-framework transactions transactionscope