DbTransaction类和C#中的接口

时间:2012-01-12 08:08:58

标签: c# interface

我遇到了一个实现一个接口的例子。代码部分是

public partial interface IDataProvider
{
    DataTable GetEmployeeAbsenceDurationTypes();

    void AlterEmployeeAbsenceDurationTypes(DataTable lookUpTable);
}

public partial class DataProvider : IDataProvider
{    

    public DataTable GetEmployeeAbsenceDurationTypes()
    {
        return GetEmployeeAbsenceDurationTypes((DbTransaction)null);
    }
    public DataTable GetEmployeeAbsenceDurationTypes(DbTransaction tran)
    {
        //Db Operations
    }
}

我的第一个问题是关于这个“DbTransaction”课程。它不在我的项目中,它是一个类的构建吗?

我的第二个问题是,为什么在DataProvider(实现类)中,该函数正在调用自身的另一个重载?

2 个答案:

答案 0 :(得分:5)

DbTransaction是用于在ADO.NET中表示数据库事务的公共基类;每个实际的ADO.NET提供程序都是这个(通常)的子类 - 例如SqlTransaction : DbTransaction(sql-server客户端)。

调用self的重载是在C#4.0中添加可选参数无代码重复之前的常用方法。在这种情况下,这基本上是4.0之前的实现方式:

public DataTable GetEmployeeAbsenceDurationTypes(DbTransaction tran = null) {...}

实现(重载或可选参数)允许使用表单:

obj.GetEmployeeAbsenceDurationTypes(); // without transaction
obj.GetEmployeeAbsenceDurationTypes(tran); // with transaction

答案 1 :(得分:4)

第一个问题是无法在没有看到整个代码的情况下回答 ,但它可能指的是System.Data.Common.DbTransaction

至于实现 - 可能是重用代码的一种方式,就是这样。如果 with 参数的方法的实现可以自然地处理参数值null作为“在新事务中执行”(或者无参数方法应该是什么行为)为什么不会你想要一个重载来调用另一个?