обрабатывать транзакции в Linq to sql - PullRequest
1 голос
/ 22 января 2011

Я реализую веб-приложение asp.net MVC, где я использую Linq to Sql для манипулирования данными в базе данных.но в одном из моих действий я хочу вставить несколько записей таблицы, которые зависят друг от друга, ссылаясь на предыдущие идентификаторы вставки.Так что я просто хочу знать, как обрабатывать транзакции, как начать транзакцию, зафиксировать, откат и все, как в ADO.net.как управлять этим.Что делать, если одна из вставок потерпела крах во время манипуляции?

Примечание: - Я не использую хранимые процедуры здесь.Я использую лямбда-выражения и методы.Также они используются в разных классах менеджера. Пример: Для Create Subject - метод, используемый в классе SubjectManager для вставки информации о субъекте, который возвращает идентификатор субъекта.в этой теме я вставляю let скажем его главы с другим методом в классе менеджера, как ChapterManager.который снова возвращает идентификатор главы, на основе этого идентификатора главы, вставляя темы главы.который снова использует менеджер тем, как и выше. В каждом классе менеджера я создаю объект dataContext для того же.и я контролирую все это одним действием в моем контроллере.но беспокоюсь об управлении транзакциями.как я могу использовать здесь?

Ответы [ 2 ]

1 голос
/ 22 января 2011

DataContext уже включает встроенный объект транзакции. Например, допустим, вы размещаете новый заказ для клиента. Вы можете настроить свою модель так, чтобы следующий код обновлял таблицу Customer и Order с помощью одного SubmitChanges. Пока между двумя таблицами существует отношение внешнего ключа, встроенный объект транзакции обрабатывает как обновление клиента, так и вставку заказа в одной транзакции. Использование объекта TransactionScope для инкапсуляции одного DataContext является избыточным:

using (DataContext dc = new DataContext())
{
    Order order = new Order();

    order.ProductID = 283564;
    order.Quantity = 7;
    order.OrderDate = DateTime.Now;

    Customer customer = dc.Customers.Single(c => c.CustomerID == 6);

    customer.LastUpdate = order.OrderDate;
    customer.Orders.Add(order);

    dc.SubmitChanges();
}
1 голос
/ 22 января 2011

Код удален в пользу ответа Нейла

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