代码之家  ›  专栏  ›  技术社区  ›  Kb.

将TableAdapter与基类、接口或分部类一起使用的更智能方法

  •  2
  • Kb.  · 技术社区  · 15 年前

    C ADO.NET TableAdapter对象既不实现也不接口,也不基类(组件除外)。

    有人在模板(gof-)模式中使用过TableAdapter吗?

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

    2 回复  |  直到 15 年前
        1
  •  5
  •   this. __curious_geek    15 年前

    TableAdapter没有具体的基类或接口。但是女士的人足够聪明,可以留下部分。所以您可以用分部类来使用TableAdapter。我们遇到了类似的问题,我们想要编写通用代码来处理数据模型中的所有表适配器。我们做的如下。

    1.请注意。 定义了接口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.)稍后,我们为项目中的每个表适配器创建了分部类,并且 实现了这个接口 为了他们。

    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
    }
    

    现在您可以对ITableadAdapter进行编程。

        2
  •  1
  •   Jeremy McGee    15 年前

    与大多数BCL一样,由于您没有访问内部的权限,因此需要定义自己的类层次结构,并减少对BCL类的直接引用。

    有点像 Adapter pattern 可能适合您的需要:使用它将TableAdapter“包装”到一些可以用作模板的东西中。