NHibernate - Operações básicas de CRUD
Neste capítulo, vamos cobrir o básico CRUD operations. Agora que nosso sistema está pronto para iniciar, já que implementamos com sucesso nossa classe de domínio Student, também definimos os arquivos de mapeamento e configuramos o NHibernate. Agora podemos usar algumas consultas para realizar operações CRUD.
Criar dados
Como você pode ver, não temos dados em nossa tabela de alunos em NHibernateDemoDB base de dados.
Portanto, para adicionar alguns dados, precisamos realizar o Add/Create operação conforme mostrado abaixo.
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();
}
Como você pode ver, criamos dois alunos e chamamos o método Save () do OpenSession e, em seguida, chame o Commit () do BeginTransaction. Aqui está a implementação completa emProgram.cs Arquivo
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();
}
}
}
}
Agora, vamos executar este aplicativo e ir para o SQL Server Object Explorer e atualizar seu banco de dados. Você verá que os dois alunos acima agora são adicionados à tabela Aluno no banco de dados NHibernateDemoDB.
Leia os dados da tabela do aluno
Você pode ver que agora temos dois registros em nossa tabela de alunos. Para ler esses registros da tabela, precisamos chamar oCreateCriteria() do OpenSession, conforme mostrado no código a seguir.
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();
}
Portanto, se você quiser a lista de registro, podemos simplesmente dizer lista do tipo Aluno.
Agora use o foreach por meio de todos os alunos e diga para imprimir a identidade, FirstMidName e LastNameno console. Agora, vamos executar este aplicativo novamente e você verá a seguinte saída na janela do console.
1 Allan Bommer
2 Jerry Lewis
Você também pode recuperar qualquer registro, especificando o ID no Get() método de OpenSession usando o código a seguir.
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();
}
Agora, ao executar seu aplicativo, você verá a seguinte saída.
1 Allan Bommer
2 Jerry Lewis
Retrieved by ID
1 Allan Bommer
Atualizar registro
Para atualizar o registro na tabela, precisamos primeiro buscar esse registro específico e, em seguida, atualizar esse registro chamando o Update() método de OpenSession conforme mostrado no código a seguir.
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();
}
Agora, ao executar seu aplicativo, você verá a seguinte saída.
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
Como você pode ver, LastName de ID igual a 1 é atualizado de Bommer para Donald.
Apagar registro
Para excluir qualquer registro da tabela, precisamos primeiro buscar esse registro específico e, em seguida, excluir esse registro chamando o Delete() método de OpenSession conforme mostrado no código a seguir.
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();
}
Agora, ao executar seu aplicativo, você verá a seguinte saída.
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
Como você pode ver, o registro que possui ID igual a 1 não está mais disponível no banco de dados. Você também pode ver o banco de dados no SQL Server Object Explorer.