开发手册 欢迎您!
软件开发者资料库

NHibernate - 基本的CRUD操作

NHibernate基本CRUD操作 - 从概述,架构,Orm,环境设置,入门,基本Orm,基本Crud操作,Profiler,添加Intelliesnse到映射文件,数据类型映射,配置,覆盖配置,批量大小,缓存,学习NHibernate映射组件,关系,集合映射,级联,延迟加载,反向关系,加载/获取,Linq,Hibernate查询语言,条件查询,QueryOver查询,本机Sql,流利Hibernate。

在本章中,我们将介绍基本的 CRUD操作.现在我们的系统已经准备好开始,因为我们已经成功实现了我们的域Student类,我们还定义了映射文件并配置了NHibernate.我们现在可以使用一些查询来执行CRUD操作.

创建数据

您可以看到我们的Student表中没有数据 NHibernateDemoDB 数据库.

NHibernate DemoDB

所以要添加一些数据,我们需要执行添加/创建操作,如下所示.

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(); }

您可以看到我们创建了两个学生,然后调用 OpenSession 然后调用 BeginTransaction 的Commit().以下是使用NHibernate.Cfg在 Program.cs 文件

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();             x.Dialect();          });             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();          }       }    } }

现在让我们运行这个应用程序,然后转到SQL Server对象资源管理器并刷新数据库.你会看到上面两个学生现在被添加到NHibernateDemoDB数据库的Student表中.

SQL Server对象

从学生表中读取数据

您可以看到我们的学生表中现在有两条记录.要从表中读取这些记录,我们需要调用OpenSession的 CreateCriteria(),如下面的代码所示.

using (var session = sefact.OpenSession()) {       using (var tx = session.BeginTransaction()) {       var students = session.CreateCriteria().List();             foreach (var student in students) {          Console.WriteLine("{0} \t{1} \t{2}",             student.ID,student.FirstMidName, student.LastName);       }             tx.Commit();    }       Console.ReadLine(); }

因此,如果您想要记录列表,我们只需简单地说出学生类型列表.

现在通过所有学生使用 foreach ,然后在控制台上打印ID, FirstMidName LastName .现在,让我们再次运行此应用程序,您将在控制台窗口中看到以下输出.

1 Allan Bommer2 Jerry Lewis

您还可以使用以下代码在OpenSession的 Get()方法中指定ID来检索任何记录.

using (var session = sefact.OpenSession()) {       using (var tx = session.BeginTransaction()) {       var students = session.CreateCriteria().List();             foreach (var student in students) {          Console.WriteLine("{0} \t{1} \t{2}", student.ID,             student.FirstMidName, student.LastName);       }            var stdnt = session.Get(1);       Console.WriteLine("Retrieved by ID");       Console.WriteLine("{0} \t{1} \t{2}", stdnt.ID,          stdnt.FirstMidName, stdnt.LastName);       tx.Commit();   }    Console.ReadLine();  }

现在,当您运行应用程序时,您将看到以下输出.

1 Allan Bommer2 Jerry LewisRetrieved by ID1 Allan Bommer

更新记录

要更新表中的记录,我们需要先获取该特定记录,然后通过调用OpenSession的 Update()方法更新该记录.如下代码所示.

using (var session = sefact.OpenSession()) {    using (var tx = session.BeginTransaction()) {       var students = session.CreateCriteria().List();            foreach (var student in students) {          Console.WriteLine("{0} \t{1} \t{2}", student.ID,             student.FirstMidName, student.LastName);       }            var stdnt = session.Get(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(); }

现在,当您运行应用程序时,您将看到以下输出.

1 Allan Bommer2 Jerry LewisRetrieved by ID1 Allan BommerUpdate the last name of ID = 1Fetch the complete list again1 Allan Donald2 Jerry Lewis

如您所见,ID等于1的LastName从Bommer更新为唐纳德.

删除记录

要从表中删除任何记录,我们需要首先获取该特定记录,然后通过调用该记录来删除该记录. OpenSession的Delete()方法,如下面的代码所示.

using (var session = sefact.OpenSession()) {       using (var tx = session.BeginTransaction()) {       var students = session.CreateCriteria().List();            foreach (var student in students) {          Console.WriteLine("{0} \t{1} \t{2}", student.ID,             student.FirstMidName, student.LastName);       }            var stdnt = session.Get(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(); }

现在,当您运行应用程序时,您将看到以下输出.

1 Allan Donald2 Jerry LewisRetrieved by ID1 Allan BommerDelete the record which has ID = 1Fetch the complete list again2 Jerry Lewis

您可以看到ID等于1的记录在数据库中不再可用.您还可以在SQL Server对象资源管理器中查看数据库.

对象资源管理器