NHibernate - Operazioni CRUD di base
In questo capitolo, tratteremo le basi CRUD operations. Ora che il nostro sistema è pronto per l'avvio, poiché abbiamo implementato con successo la nostra classe Student del dominio, abbiamo anche definito i file di mappatura e configurato NHibernate. Ora possiamo utilizzare alcune query per eseguire operazioni CRUD.
Crea dati
Come puoi vedere, non abbiamo dati nella nostra tabella Studenti in formato NHibernateDemoDB Banca dati.
Quindi, per aggiungere alcuni dati, dobbiamo eseguire il file Add/Create funzionamento come mostrato di seguito.
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();
}
Come puoi vedere, abbiamo creato due studenti e quindi abbiamo chiamato il metodo Save () del file OpenSession e quindi chiama il Commit () di BeginTransaction. Ecco l'implementazione completa inProgram.cs file
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();
}
}
}
}
Ora eseguiamo questa applicazione, quindi andiamo in Esplora oggetti di SQL Server e aggiorniamo il database. Vedrai che i due studenti di cui sopra sono ora aggiunti alla tabella Studenti nel database NHibernateDemoDB.
Leggere i dati dalla tabella degli studenti
Puoi vedere che ora abbiamo due record nella nostra tabella degli studenti. Per leggere questi record dalla tabella, dobbiamo chiamare il fileCreateCriteria() di OpenSession come mostrato nel codice seguente.
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();
}
Quindi, se vuoi l'elenco dei record, possiamo semplicemente dire elenco di tipo Studente.
Ora usa il file foreach attraverso tutti gli studenti e dì stampa l'ID, FirstMidName e LastNamesulla console. Ora, eseguiamo di nuovo questa applicazione e vedrai il seguente output nella finestra della console.
1 Allan Bommer
2 Jerry Lewis
Puoi anche recuperare qualsiasi record specificando l'ID nel file Get() metodo di OpenSession utilizzando il codice seguente.
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();
}
Ora quando esegui la tua applicazione, vedrai il seguente output.
1 Allan Bommer
2 Jerry Lewis
Retrieved by ID
1 Allan Bommer
Aggiorna record
Per aggiornare il record nella tabella, dobbiamo prima recuperare quel particolare record e quindi aggiornare quel record chiamando il Update() metodo di OpenSession come mostrato nel codice seguente.
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();
}
Ora quando esegui la tua applicazione, vedrai il seguente output.
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
Come puoi vedere, LastName di ID uguale a 1 viene aggiornato da Bommer a Donald.
Elimina record
Per eliminare qualsiasi record dalla tabella, dobbiamo prima recuperare quel particolare record e quindi eliminare quel record chiamando il Delete() metodo di OpenSession come mostrato nel codice seguente.
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();
}
Ora quando esegui la tua applicazione, vedrai il seguente output.
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
Come puoi vedere che il record che ha ID uguale a 1 non è più disponibile nel database. È inoltre possibile visualizzare il database in Esplora oggetti di SQL Server.