C# 我可以混合使用SqlConnection.BeginTransaction和TransactionScope吗?
这是与环境有关的 我希望在事务中接受的集合中的对象使用SqlConnection.BeginTransaction方法实现它们自己的事务 读完这篇文章后,我不确定我是否能把它们混合起来。 我使用的是SQLServer2005,每个对象都使用静态配置类中的连接详细信息 有人有这方面的经验吗 以下是示例代码:C# 我可以混合使用SqlConnection.BeginTransaction和TransactionScope吗?,c#,database,transactions,C#,Database,Transactions,这是与环境有关的 我希望在事务中接受的集合中的对象使用SqlConnection.BeginTransaction方法实现它们自己的事务 读完这篇文章后,我不确定我是否能把它们混合起来。 我使用的是SQLServer2005,每个对象都使用静态配置类中的连接详细信息 有人有这方面的经验吗 以下是示例代码: using(TransactionScope scope = new TransactionScope()) { for (int i=0; i<=1000....) {
using(TransactionScope scope = new TransactionScope())
{
for (int i=0; i<=1000....)
{
SqlConnection con = new SqlConnection()
SqlCommand cmd = new SqlCommand("delete from ...", con);
try {
con.Open();
DbTransaction t = con.BeginTransaction();
cmd.ExecuteNonQuery();
...
cmd.CommandText = .... ;
cmd.ExecuteNonQuery();
t.Commit ...
}
catch {
t.Rollback ...
}
con.Close()
}
}
使用(TransactionScope范围=新TransactionScope())
{
对于(inti=0;i,在花费数小时将MSDTC配置为在两台机器上工作之后,我终于可以测试代码了
它似乎可以工作(使用1个数据库)
上面的问题可能对那些无法访问源代码因而无法摆脱“遗留”的人有用事务性系统,或者若代码的事务部分并没有本地化,或者像我的例子一样,您不想过多地处理在生产环境中被证明是稳定的复杂代码,但您需要引入嵌套事务
如果您有不同的经验,请告诉我。在我的例子中,我们有“单元”测试,它们包装在TransactionScope中,这样在我们的开发机器上,我们就可以实现复杂的数据库操作,而不必考虑每个测试和测试类,并且[理论上]拥有所有这些回滚。同时,我们不一定希望在生产服务器上使用MS DTC,我想在常规事务中封装一些复合实体框架实体操作,以便在任何操作失败时整个操作都可以回滚…理想情况下,TransactionScope应该继续工作,而内部事务应该继续工作o、 。。。