Als Transaktion (von lat. trans „über“, actio zu agere „(durch)führen“) bezeichnet man in der Informatik eine feste Folge von Operationen, welche als eine logische Einheit betrachtet werden. Transaktionen werden von Transaktionssystemen verarbeitet; diese erzeugen dabei aus mehreren Transaktionen eine Historie. Meist kommen sie bei Datenbanken zum Einsatz.
Quelle: Wikipedia.de
In LINQ wird eine Transaktion automatisch gestartet, wenn die SubmitChanges-Methode der DataContext-Klasse aufgerufen wird. Dabei verwendet LINQ to SQL eine explizite Transaktion.
Eine manuelle Kontrolle über die Transaktion kann durch Erstellung ein eigenes Transaction-Objekt übernommen werden.
Für den folgenden lauffähigen Beispielcode wird die AdventureWorks-Datenbank verwendet. Eine LINQ to SQL Classes-Datei (dbml-Datei) mit dem Namen AdventureWorks.dbml und mit einer Entity-Klasse
1 using System;
2
3 namespace LinqTransactionSample0001
4 {
5 class Program
6 {
7 static void Main(string[] args)
8 {
9 // DataContext Objekt erstellen
10 AdventureWorksDataContext db = new AdventureWorksDataContext();
11
12 // Transaction Objekt erstellen und mit NULL initialisieren
13 System.Data.Common.DbTransaction trans = null;
14
15 // Datenbankverbindung öffnen und den aktiven Transaction der Verbindung
16 // an das trans Objekt übergeben
17 db.Connection.Open();
18 trans = db.Connection.BeginTransaction();
19
20 // DataContext Objekt wird ab hier das trans Objekt für die Transaktionen verwenden
21 db.Transaction = trans;
22
23 // Zwei neue CountryRegion Objekte erstellen
24 CountryRegion cr1 = new CountryRegion();
25 cr1.Name = "Country ABC";
26 cr1.CountryRegionCode = "ABC";
27 cr1.ModifiedDate = DateTime.Now;
28
29 CountryRegion cr2 = new CountryRegion();
30 cr2.Name = "Country DEF";
31 cr2.CountryRegionCode = "DEF";
32 cr2.ModifiedDate = DateTime.Now;
33
34 // CountryRegion Objekt an die CountryRegions Collection hinzufügen
35 db.CountryRegions.InsertOnSubmit(cr1);
36 db.CountryRegions.InsertOnSubmit(cr2);
37
38 try
39 {
40 db.SubmitChanges();
41
42 // Wenn bis hier keinen Fehler auftritt, wird die Commit-Method des Transaction-Objekts aufgrufen
43 // und die Daten werden in die Datenbank geschrieben.
44 // Commit transaction
45 trans.Commit();
46 }
47 catch(Exception ex)
48 {
49 // Bei einem Fehler-Fall wird die Rollback-Methode des Transaction-Objektes aufgerufen
50 // Rollback transaction
51 if ( trans != null)
52 {
53 trans.Rollback();
54 }
55
56 Console.WriteLine(ex.Message.ToString());
57 }
58 finally
59 {
60 // Die Datenbank-Verbindung schliessen, wenn die Verbidung offen ist.
61 // Close the connection
62 if(db.Connection.State == System.Data.ConnectionState.Open)
63 {
64 db.Connection.Close();
65 }
66 }
67
68 Console.ReadKey();
69 }
70 }
71 }
72
Das Beispiel-Projekt findet Ihr unter: LinqTransactionSample0001
No comments:
Post a Comment