Нужно добавить ссылку и подключить пространство имен System.Transactions;
В этом примере транзакция будет передавать два пакета. В первом пакете будет заполнение таблицы данными, во втором пакете будут изменения данных.
using System.Transactions;
В этом примере транзакция будет передавать два пакета. В первом пакете будет заполнение таблицы данными, во втором пакете будут изменения данных.
Main.cs
using System; //добавить ссылку using System.Linq; //добавить ссылку //подключить пространство имен using System.Data; using System.Data.Linq; using System.Transactions; //добавить ссылку using System.Data.Linq.Mapping; /*создание класса для сопоставления с реляционной базой данных*/ public class MyDataBase : DataContext { public Table<MyTable> Books; public MyDataBase(string connection) : base(connection) { } } /*создание класса для сопоставления с таблицей*/ [Table(Name = "Book")] public class MyTable { [Column(IsPrimaryKey = true)] public int IDBook { set; get; } [Column] public string Name { set; get; } [Column] public int Amount { set; get; } [Column] public decimal Price { set; get; } } class Program { public static int Main() { /*создание данных, несколько строк*/ var dataMany = new[] { new MyTable() { IDBook = 1, Name = "Азбука", Amount = 10, Price = 10.15m }, new MyTable() { IDBook = 2, Name = "Букварь", Amount = 20, Price = 20.25m }, new MyTable() { IDBook = 3, Name = "Математика", Amount = 30, Price = 30.35m } }; /*создание данных, одна строка*/ MyTable dataSingle = new MyTable { IDBook = 4, Name = "География", Amount = 40, Price = 40.45m }; MyDataBase db = new MyDataBase(@"Server=(localdb)\v11.0;Integrated Security=true;AttachDbFileName=d:\zzz.mdf;"); /*изменение данных*/ //создание запроса var query1 = from val in db.Books where val.Name == "География" select val; using(TransactionScope ts = new TransactionScope()) { try { //--- 1 пакет --- /*вставка нескольких строк*/ db.Books.InsertAllOnSubmit(dataMany); /*вставка одной строки*/ db.Books.InsertOnSubmit(dataSingle); //обязательное обновление в конце пакета db.SubmitChanges(); //--- 2 пакет --- //выполнение запроса foreach(var i in query1) { //устанавливаем новое значение i.Amount = 400; } //обязательное обновление в конце пакета db.SubmitChanges(); //компилируем транзакцию ts.Complete(); Console.WriteLine("Транзакция выполнена успешно!"); } catch(Exception exc) { Console.WriteLine("Error!\n{0}", exc.Message); } } Console.WriteLine(); /*вывод данных*/ //создание запроса var query = from val in db.Books select val; //выполнение запроса foreach(var i in query) { Console.WriteLine("{0} {1} {2} {3}", i.IDBook, i.Name, i.Amount, i.Price); } Console.ReadKey(); return 0; } }
using System; //добавить ссылку using System.Linq; //добавить ссылку //подключить пространство имен using System.Data; using System.Data.Linq; using System.Transactions; //добавить ссылку using System.Data.Linq.Mapping; /*создание класса для сопоставления с реляционной базой данных*/ public class MyDataBase : DataContext { public Table<MyTable> Books; public MyDataBase(string connection) : base(connection) { } } /*создание класса для сопоставления с таблицей*/ [Table(Name = "Book")] public class MyTable { [Column(IsPrimaryKey = true)] public int IDBook { set; get; } [Column] public string Name { set; get; } [Column] public int Amount { set; get; } [Column] public decimal Price { set; get; } } class Program { public static int Main() { /*создание данных, несколько строк*/ var dataMany = new[] { new MyTable() { IDBook = 1, Name = "Азбука", Amount = 10, Price = 10.15m }, new MyTable() { IDBook = 2, Name = "Букварь", Amount = 20, Price = 20.25m }, new MyTable() { IDBook = 3, Name = "Математика", Amount = 30, Price = 30.35m } }; /*создание данных, одна строка*/ MyTable dataSingle = new MyTable { IDBook = 4, Name = "География", Amount = 40, Price = 40.45m }; MyDataBase db = new MyDataBase(@"Server=(localdb)\v11.0;Integrated Security=true;AttachDbFileName=d:\zzz.mdf;"); /*изменение данных*/ //создание запроса var query1 = from val in db.Books where val.Name == "География" select val; using(TransactionScope ts = new TransactionScope()) { try { //--- 1 пакет --- /*вставка нескольких строк*/ db.Books.InsertAllOnSubmit(dataMany); /*вставка одной строки*/ db.Books.InsertOnSubmit(dataSingle); //обязательное обновление в конце пакета db.SubmitChanges(); //--- 2 пакет --- //выполнение запроса foreach(var i in query1) { //устанавливаем новое значение i.Amount = 400; } //обязательное обновление в конце пакета db.SubmitChanges(); //компилируем транзакцию ts.Complete(); Console.WriteLine("Транзакция выполнена успешно!"); } catch(Exception exc) { Console.WriteLine("Error!\n{0}", exc.Message); } } Console.WriteLine(); /*вывод данных*/ //создание запроса var query = from val in db.Books select val; //выполнение запроса foreach(var i in query) { Console.WriteLine("{0} {1} {2} {3}", i.IDBook, i.Name, i.Amount, i.Price); } Console.ReadKey(); return 0; } }
Транзакция выполнена успешно!
1 Азбука 10 10,15
2 Букварь 20 20,25
3 Математика 30 30,35
4 География 400 40,45
1 Азбука 10 10,15
2 Букварь 20 20,25
3 Математика 30 30,35
4 География 400 40,45