C# SQL事务包装器

C# SQL事务包装器,c#,idisposable,sqlconnection,sqltransaction,C#,Idisposable,Sqlconnection,Sqltransaction,我试图用C代码封装事务处理。为了实现这一点,我创建了一个名为TransactionProvider的类 public class TransactionProvider : IDisposable { public SqlTransaction Transaction { get; private set; } private SqlConnection connection; private bool disposed; public TransactionP

我试图用C代码封装事务处理。为了实现这一点,我创建了一个名为TransactionProvider的类

public class TransactionProvider : IDisposable
{
    public SqlTransaction Transaction { get; private set; }
    private SqlConnection connection;
    private bool disposed;

    public TransactionProvider(string connectionString, IsolationLevel isolationLevel, string transactionName)
    {
        connection = new SqlConnection(connectionString);
        connection.Open();
        Transaction = connection.BeginTransaction(isolationLevel, transactionName);
    }

    public void Dispose()
    {
        if (!disposed)
        {
            Transaction.Dispose();
            connection.Dispose();
            disposed = true;
        }
    }
}
用法:

using (TransactionProvider transactionProvider = new TransactionProvider(ProductionRepository.ConnectionString, IsolationLevel.RepeatableRead, "GetPolicyNumbers"))
{
    foreach (Policy policyDetail in policiesDetails)
    {
        policyNumbers.Add(GetPolicyNumber(policyDetail.Product, transactionProvider.Transaction));
    }
    transactionProvider.Transaction.Commit();
}

这里的想法是在“using”语句中实例化这个类,并尽快释放到SQL(+finishtransaction)的连接。经过一些阅读,我仍然不知道如何处理IDisposable在这里。TransactionProvider不直接访问任何非托管资源,因此我决定没有理由实现析构函数。我想唯一剩下的就是确保SQLTransaction和SQLConnection都已完成。上面的代码可以完成这项工作吗?它是否确保一旦TransactionProvider对象超出范围,所有连接都将立即关闭?

但为什么要使用disposed标志?我想我在尝试IDisposable的多个实现后留下了该标志,试图阻止对SQLConnection和SQLTransaction的多个Dispose()调用。既然您已经提到了它,现在的形式可能不需要它。感谢您的反馈!