powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Проверка бизнес-ограничений после отработки AdapterManager.UpdateAll
1 сообщений из 1, страница 1 из 1
Проверка бизнес-ограничений после отработки AdapterManager.UpdateAll
    #37053383
Kuvaldis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! :)
Использую Adapter Manager для внесения изменений из локального DataSet в SQL Server 2008. Все вроде бы работало,.. до того времени, как не появились бизнес-требования, проверка которых должна выполняться ПОСЛЕ внесения всех изменений (например, сумма столбца для определенных строк = 1). DataAdapter принимает команды, которые работают на уровне строк (у меня - это хранимые процедуры). Поэтому данные правила я проверить в процедурах не могу.
Начал изобретать велосипед с решением и транзакционностью и надумал следующее:
1. Переписал метод "родной" Adapter Manager.UpdateAll так, чтобы перед вызовом Commit вызывалась моя процедура, которая выполняет нужные проверки.
Что-то такое

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
    
...     
//---- Perform updates -----------
                //
                if ((this.UpdateOrder == UpdateOrderOption.UpdateInsertDelete))
                {
                    result = (result + this.UpdateUpdatedRows(dataSet, allChangedRows, allAddedRows));
                    result = (result + this.UpdateInsertedRows(dataSet, allAddedRows));
                }
                else
                {
                    result = (result + this.UpdateInsertedRows(dataSet, allAddedRows));
                    result = (result + this.UpdateUpdatedRows(dataSet, allChangedRows, allAddedRows));
                }
                result = (result + this.UpdateDeletedRows(dataSet, allChangedRows));
                
                -- !!!!!
                CheckResourceAllocation(dataSet, workTransaction);

                workTransaction.Commit();

--------------------------------
        private void CheckResourceAllocation(RoadmapDBResourceDataSet dataSet,  
           IDbTransaction transaction)
        {
            var invalidResourceAllocationTable = new DataTable();
            var checkAllocationCommand = Connection.CreateCommand();
            checkAllocationCommand.Transaction = transaction;
            checkAllocationCommand.CommandType = CommandType.StoredProcedure;
            checkAllocationCommand.CommandText = "dbo.Resource_CheckAllocation";
            using (var reader = checkAllocationCommand.ExecuteReader())
            {
                invalidResourceAllocationTable.Load(reader);
                ApplyAllocationErrorsToDataTable(dataSet.Resource, invalidResourceAllocationTable);
            }
        }


Но, в этом случае нельзя безопасно использовать отдельные мои написанные процедуры, т.к. в них проверки нету.

Второй вариант - это написать полностью с нуля логику обновления DataSet самому. Т.е. передавать на сервер XML с данными и нужными операциями, дергать нужную процедуру (которая будет одна и вызываться будет один раз), и самому же вручную обрабатывать результат, обновлять DataSet ошибочными данными (мне они нужны, т.к. после обновления происходит подсветка ошибок и соотвествующие сообщения на клиенте).

Ребята! Кто что думает? Может, кто-то уже сталкивался с подобной проблемой?

Буду раз услышать советы и мнения.

СУВ,
Kuvaldis
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Проверка бизнес-ограничений после отработки AdapterManager.UpdateAll
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]