создать метод Sql TransAction на Data.xsd - PullRequest
1 голос
/ 08 февраля 2010

Я добавил в свой проект элемент набора данных: myDataSet.xsd После этого я удаляю таблицы из файла myDataSet.xsd. Это все хорошо. Я хочу построить Sql Transaction как функцию на этот набор данных, как я могу это сделать?

1 Ответ

2 голосов
/ 08 февраля 2010

A DataSet - это структура в памяти - нет прямой связи с SQL или SqlTransaction.

Я думаю, что вы, вероятно, имеете в виду выполнение операций над сгенерированными TableAdapter экземплярами с использованием транзакции SQL.

Это сложно.

У Сахиля Малика есть достаточно полный учебник по предмету (да, это действительно "предмет"). По сути, все сводится к расширению TableAdapter через частичный класс с помощью метода BeginTransaction, который открывает внутренний SqlConnection и удерживает его открытым, и возвращает вам SqlTransaction, который вы затем используете обычным образом. Это громоздко, и вы должны делать это для каждого TableAdapter. В качестве альтернативы вы можете использовать System.Transactions.TransactionScope, но вам придется перепрыгивать через различные обручи, чтобы избежать перехода на DTC (распределенная транзакция).

Я бы посоветовал вам взглянуть на связанную статью, а не копировать и вставлять код здесь.

Если у вас много TableAdapters или, в общем, вам нужно объединить более одной из них в одну транзакцию, подход Sahil не будет масштабироваться слишком хорошо. В прошлом (когда я все еще использовал TableAdapters) я использовал метод, аналогичный Райану Уитакеру , который в основном был исправлен обезьянами; он использует Reflection для большей части тяжелой работы.

Эти два типа являются определенными ресурсами для обеспечения безопасности кода TableAdapter. Лично я бы больше не использовал напечатанный DataSet; теперь это практически устарело, поскольку Linq to SQL и EF существуют, они гораздо более мощные, имеют отложенное выполнение, не полагаются исключительно на структуры в памяти и используют шаблон таблиц Data Gateway + Unit of Work, который очень прост начать работать с транзакциями. По моему опыту, если этого не достаточно, обычно тоже не будет DataSet, и мне придется опуститься до голых SqlCommand экземпляров. Но если по какой-то причине вам абсолютно необходимо использовать DataSet для доступа к данным, вам должен подойти один из двух вышеупомянутых методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...