c# - 将 TableAdapter 与基类、接口(interface)或部分类一起使用的更智能方法

标签 c# .net ado.net tableadapter

C# ADO.Net TableAdapter 对象不实现接口(interface)或基类(组件除外)。

有人在 (GoF) 模板模式的应用程序中使用过 TableAdapter 吗?

更新: 我想解决这里描述的问题:
Help to improve a migration program
通过使用模板模式(GoF), 适配器模式 (GoF) 或其他不错的模式。

最佳答案

TableAdapter 没有具体的基类或接口(interface)。但 MS 的人很聪明,他们会部分离开。因此,您可以使用部分类来使用 TableAdapter。我们遇到了类似的问题,我们想要编写可以解决数据模型中所有表适配器的通用代码。我们按照以下方式进行了操作。

1.) 定义了接口(interface)ITableAdapter

public interface ITableAdapter<TDataTable> : IDisposable
    where TDataTable : DataTable
{
    void AttachTransaction(SqlTransaction _transaction);
    SqlTransaction CreateTransaction();

    int Update(TDataTable _dataTable);

    TDataTable GetData();
    TDataTable GetById(int Id);
}

2.) 后来我们为项目中的每个表适配器创建了部分类,并为它们实现了这个接口(interface)

public partial class UsersTableAdapter : ITableAdapter<FileParkDataSet.UsersDataTable>
{
    #region ITableAdapter<UsersDataTable> Members

    public void AttachTransaction(SqlTransaction _transaction)
    {
        if (this.Adapter == null)
            this.InitAdapter();

        this.Adapter.InsertCommand.Transaction = _transaction;
        this.Adapter.UpdateCommand.Transaction = _transaction;
        this.Adapter.DeleteCommand.Transaction = _transaction;

        foreach (var _cmd in this.CommandCollection)
        {
            _cmd.Transaction = _transaction;
        }
    }

    public SqlTransaction CreateTransaction()
    {
        if (this.Connection.State != ConnectionState.Closed)
            this.Connection.Close();
        this.Connection.Open();

        return this.Connection.BeginTransaction();
    }

    #endregion
}

现在您可以针对 ITableAdapter 进行编程。

关于c# - 将 TableAdapter 与基类、接口(interface)或部分类一起使用的更智能方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1847193/

相关文章:

c# - 在 DataTable 中搜索不同的值

c# - 比较多个列表以包含相同的数据

c# - c# 控制台应用程序也可以充当类库吗?

c# - 动态删除菜单项 : Dispose calls Remove

.net - 如何在数据库中存储统计信息

c# - 从 C# 在我的数据库中创建一个表用户定义函数

.net - 更改 Dapper,以便将数据库空值映射到 double.NaN

c# - 对于 64 位应用程序,.NET 使用 WSAStartup 是否安全?

c# - 如何让 visual studio 可靠地运行预构建/编译的东西?

c# - TSQL 性能与 @@Error 和它们可以被替换吗?