Mocosh
Язык(Language):

Что такое Mocosh.DatasetManager?

Mocosh.DatasetManager является .NET библиотекой. Она содержит объекты для работы с объектами DataSet.

Почему трудно работать с объектами DataSet?

Объект DataSet может содержать в себе большое количество таблиц, которые могут иметь связи с другими таблицами. Заполнять данными объекты DataSet несложно. Для этого можно отключить проверку ссылочной целостности:

MyDataSet.EnforceConstraints = false;
....
MyDataSet.EnforceConstraints = true;

Кроме того объекты DataSet, которые могут быть созданы в среде Visual Studio 2005 содержат связи без проверки ссылочной целостности.

После заполнения мы можем изменять данные в объекте DataSet. Мы можем вставлять, изменять или удалять строки в таблицах. Для сохранение этих изменений в базу данный мы должны использовать объекты DataAdapter или TableAdapter (которые могут быть сгенерированы в Visual Studio 2005). Это сложный процесс.

Для примера:

Мы имеем объект DataSet с двумя таблицами.

Схема со связанными таблицами

Предположим что эти таблицы содержат вставленные, изменённые и удалённые строки. Попытаемся сохранить эти изменения в базу данных. Мы будем использовать объекты DataAdapter в следующем порядке:

RegionDataAdapter.Update(MyDataset);
TerritoriesDataAdapter.Update(MyDataset);

Метод RegionDataAdapter.Update должен поднять exception потому что таблица Region объекта DataSet содержит удалённые строки. Удаление этих строк в базе данных невозможно, поскольку они связаны со строками таблицы Territories.

Попробуем использовать адаптеры в следующем порядке:

TerritoriesDataAdapter.Update(MyDataset);
RegionDataAdapter.Update(MyDataset);

Метод TerritoriesDataAdapter.Update должен поднять exception потому что таблица Territories объекта DataSet содержит вставленные строки. Вставка этих строк в таблицу базы данных невозможна, потому что они связаны со строками таблицы Region и требуют их наличие.

Мы должны использовать следующий алгоритм для сохранения данных из объекта DataSet в базу данных:

DataTable t = MyDataset.Region.GetChanges(DataRowState.Added | DataRowState.Modified);
RegionDataAdapter.Update(t);
TerritoriesDataAdapter.Update(MyDataset);
t = MyDataset.Region.GetChanges(DataRowState.Deleted);
RegionDataAdapter.Update(t);
MyDataset.AcceptChanges();

Этот процесс не использует все таблицы объекта DataSet, потому что используются копии таблиц, которые содержат только вставленные или только удалённые строки. Если таблицы содержат identity столбцы, тогда поля этих столбцов должны обновить данные из базы данных во время вставки. Поэтому мы должны копировать эти данные в оригинальные таблицы объекта DataSet.

Если объект DataSet содержит большое количество таблиц со связями, то обновление этого объекта представляет из себя очень сложный процесс. Особенно если таблицы содержат identity столбцы, циклические связи или связи на самих себя.

Что может Mocosh.DatasetManager?

Библиотека Mocosh.DatasetManager содержит объекты для работы с объектом DataSet. Класс DatasetManager может заполнить и обновить все таблицы объекта DataSet. Если вы будете использовать эту библиотеку, то ваш программный код, который работает с базами данных будет значительно меньше. В следующем примере посмотрим, как мы можем записать данные в базу данных из таблиц Territories и Region:

using Mocosh.Data;

DataAdapterInfo adapters = new DataAdapterInfo []
{
new DataAdapterInfo(TerritoriesDataAdapter),
new DataAdapterInfo(RegionDataAdapter)
};
DatasetManager manager = new DatasetManager(MyDataset, adapters);
manager.Update();