Адаптеры таблиц не имеют конкретного базового класса или интерфейса. Но парни из MS достаточно умны, чтобы оставить частичное. Таким образом, вы можете играть с 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
}
Теперь вы можете программировать на ITableAdapter.