NHibernate - Grundlegende CRUD-Operationen
In diesem Kapitel werden wir die Grundlagen behandeln CRUD operations. Nachdem unser System startbereit ist und wir unsere Domain Student-Klasse erfolgreich implementiert haben, haben wir auch die Zuordnungsdateien definiert und NHibernate konfiguriert. Wir können jetzt einige Abfragen verwenden, um CRUD-Operationen auszuführen.
Daten erstellen
Wie Sie sehen, haben wir keine Daten in unserer Schülertabelle in NHibernateDemoDB Datenbank.
Um einige Daten hinzuzufügen, müssen wir das ausführen Add/Create Betrieb wie unten gezeigt.
using (var session = sefact.OpenSession()) {
using (var tx = session.BeginTransaction()) {
var student1 = new Student {
ID = 1,
FirstMidName = "Allan",
LastName = "Bommer"
};
var student2 = new Student {
ID = 2,
FirstMidName = "Jerry",
LastName = "Lewis"
};
session.Save(student1);
session.Save(student2);
tx.Commit();
}
Console.ReadLine();
}
Wie Sie sehen, haben wir zwei Schüler erstellt und rufen dann die Save () -Methode von auf OpenSession und rufen Sie dann das Commit () des auf BeginTransaction. Hier ist die komplette Implementierung inProgram.cs Datei
using NHibernate.Cfg;
using NHibernate.Dialect;
using NHibernate.Driver;
using System;
using System.Linq;
using System.Reflection;
namespace NHibernateDemoApp {
class Program {
static void Main(string[] args) {
var cfg = new Configuration();
String Data Source = asia13797\\sqlexpress;
String Initial Catalog = NHibernateDemoDB;
String Integrated Security = True;
String Connect Timeout = 15;
String Encrypt = False;
String TrustServerCertificate = False;
String ApplicationIntent = ReadWrite;
String MultiSubnetFailover = False;
cfg.DataBaseIntegration(x = > { x.ConnectionString = "Data Source +
Initial Catalog + Integrated Security + Connect Timeout + Encrypt +
TrustServerCertificate + ApplicationIntent + MultiSubnetFailover";
x.Driver<SqlClientDriver>();
x.Dialect<MsSql2008Dialect>();
});
cfg.AddAssembly(Assembly.GetExecutingAssembly());
var sefact = cfg.BuildSessionFactory();
using (var session = sefact.OpenSession()) {
using (var tx = session.BeginTransaction()) {
var student1 = new Student {
ID = 1,
FirstMidName = "Allan",
LastName = "Bommer"
};
var student2 = new Student {
ID = 2,
FirstMidName = "Jerry",
LastName = "Lewis"
};
session.Save(student1);
session.Save(student2);
tx.Commit();
}
Console.ReadLine();
}
}
}
}
Führen Sie nun diese Anwendung aus, rufen Sie den SQL Server-Objekt-Explorer auf und aktualisieren Sie Ihre Datenbank. Sie werden sehen, dass die beiden oben genannten Schüler jetzt zur Schülertabelle in der NHibernateDemoDB-Datenbank hinzugefügt werden.
Lesen Sie die Daten aus der Schülertabelle
Sie können sehen, dass wir jetzt zwei Datensätze in unserer Schülertabelle haben. Um diese Datensätze aus der Tabelle zu lesen, müssen wir die aufrufenCreateCriteria() von OpenSession wie im folgenden Code gezeigt.
using (var session = sefact.OpenSession()) {
using (var tx = session.BeginTransaction()) {
var students = session.CreateCriteria<Student>().List<Student>();
foreach (var student in students) {
Console.WriteLine("{0} \t{1} \t{2}",
student.ID,student.FirstMidName, student.LastName);
}
tx.Commit();
}
Console.ReadLine();
}
Wenn Sie also die Liste der Datensätze möchten, können wir einfach die Liste des Typs Student sagen.
Verwenden Sie jetzt die foreach durch alle Schüler und sagen, drucken Sie den Ausweis, FirstMidName und LastNameauf der Konsole. Lassen Sie uns diese Anwendung jetzt erneut ausführen und Sie sehen die folgende Ausgabe im Konsolenfenster.
1 Allan Bommer
2 Jerry Lewis
Sie können jeden Datensatz auch abrufen, indem Sie die ID im Feld angeben Get() OpenSession-Methode mit dem folgenden Code.
using (var session = sefact.OpenSession()) {
using (var tx = session.BeginTransaction()) {
var students = session.CreateCriteria<Student>().List<Student>();
foreach (var student in students) {
Console.WriteLine("{0} \t{1} \t{2}", student.ID,
student.FirstMidName, student.LastName);
}
var stdnt = session.Get<Student>(1);
Console.WriteLine("Retrieved by ID");
Console.WriteLine("{0} \t{1} \t{2}", stdnt.ID,
stdnt.FirstMidName, stdnt.LastName);
tx.Commit();
}
Console.ReadLine();
}
Wenn Sie nun Ihre Anwendung ausführen, wird die folgende Ausgabe angezeigt.
1 Allan Bommer
2 Jerry Lewis
Retrieved by ID
1 Allan Bommer
Datensatz aktualisieren
Um den Datensatz in der Tabelle zu aktualisieren, müssen wir zuerst diesen bestimmten Datensatz abrufen und diesen Datensatz dann durch Aufrufen von aktualisieren Update() OpenSession-Methode wie im folgenden Code gezeigt.
using (var session = sefact.OpenSession()) {
using (var tx = session.BeginTransaction()) {
var students = session.CreateCriteria<Student>().List<Student>();
foreach (var student in students) {
Console.WriteLine("{0} \t{1} \t{2}", student.ID,
student.FirstMidName, student.LastName);
}
var stdnt = session.Get<Student>(1);
Console.WriteLine("Retrieved by ID");
Console.WriteLine("{0} \t{1} \t{2}", stdnt.ID, stdnt.FirstMidName, stdnt.LastName);
Console.WriteLine("Update the last name of ID = {0}", stdnt.ID);
stdnt.LastName = "Donald";
session.Update(stdnt);
Console.WriteLine("\nFetch the complete list again\n");
foreach (var student in students) {
Console.WriteLine("{0} \t{1} \t{2}", student.ID,
student.FirstMidName, student.LastName);
}
tx.Commit();
}
Console.ReadLine();
}
Wenn Sie nun Ihre Anwendung ausführen, wird die folgende Ausgabe angezeigt.
1 Allan Bommer
2 Jerry Lewis
Retrieved by ID
1 Allan Bommer
Update the last name of ID = 1
Fetch the complete list again
1 Allan Donald
2 Jerry Lewis
Wie Sie sehen können, wird der Nachname der ID gleich 1 von Bommer auf Donald aktualisiert.
Aufzeichnung löschen
Um einen Datensatz aus der Tabelle zu löschen, müssen wir zuerst diesen bestimmten Datensatz abrufen und diesen Datensatz dann durch Aufrufen von löschen Delete() OpenSession-Methode wie im folgenden Code gezeigt.
using (var session = sefact.OpenSession()) {
using (var tx = session.BeginTransaction()) {
var students = session.CreateCriteria<Student>().List<Student>();
foreach (var student in students) {
Console.WriteLine("{0} \t{1} \t{2}", student.ID,
student.FirstMidName, student.LastName);
}
var stdnt = session.Get<Student>(1);
Console.WriteLine("Retrieved by ID");
Console.WriteLine("{0} \t{1} \t{2}", stdnt.ID, stdnt.FirstMidName, stdnt.LastName);
Console.WriteLine("Delete the record which has ID = {0}", stdnt.ID);
session.Delete(stdnt);
Console.WriteLine("\nFetch the complete list again\n");
foreach (var student in students) {
Console.WriteLine("{0} \t{1} \t{2}", student.ID, student.FirstMidName,
student.LastName);
}
tx.Commit();
}
Console.ReadLine();
}
Wenn Sie nun Ihre Anwendung ausführen, wird die folgende Ausgabe angezeigt.
1 Allan Donald
2 Jerry Lewis
Retrieved by ID
1 Allan Bommer
Delete the record which has ID = 1
Fetch the complete list again
2 Jerry Lewis
Wie Sie sehen, ist der Datensatz mit der ID 1 nicht mehr in der Datenbank verfügbar. Sie können die Datenbank auch im SQL Server-Objekt-Explorer anzeigen.