Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以混合使用SqlConnection.BeginTransaction和TransactionScope吗?_C#_Database_Transactions - Fatal编程技术网

C# 我可以混合使用SqlConnection.BeginTransaction和TransactionScope吗?

C# 我可以混合使用SqlConnection.BeginTransaction和TransactionScope吗?,c#,database,transactions,C#,Database,Transactions,这是与环境有关的 我希望在事务中接受的集合中的对象使用SqlConnection.BeginTransaction方法实现它们自己的事务 读完这篇文章后,我不确定我是否能把它们混合起来。 我使用的是SQLServer2005,每个对象都使用静态配置类中的连接详细信息 有人有这方面的经验吗 以下是示例代码: using(TransactionScope scope = new TransactionScope()) { for (int i=0; i<=1000....) {

这是与环境有关的

我希望在事务中接受的集合中的对象使用SqlConnection.BeginTransaction方法实现它们自己的事务

读完这篇文章后,我不确定我是否能把它们混合起来。 我使用的是SQLServer2005,每个对象都使用静态配置类中的连接详细信息

有人有这方面的经验吗

以下是示例代码:

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、 。。。