- NHibernate 教程
 - NHibernate - 主页
 - NHibernate - 概述
 - NHibernate - 架构
 - NHibernate-Orm
 - NHibernate - 环境设置
 - NHibernate - 入门
 - NHibernate - 基本 Orm
 - NHibernate - 基本 Crud 操作
 - NHibernate - 分析器
 - 将 Intelliesnse 添加到映射文件
 - NHibernate - 数据类型映射
 - NHibernate - 配置
 - NHibernate - 覆盖配置
 - NHibernate - 批量大小
 - NHibernate - 缓存
 - NHibernate - 映射组件
 - NHibernate - 关系
 - NHibernate - 集合映射
 - NHibernate - 级联
 - NHibernate - 延迟加载
 - NHibernate - 逆关系
 - NHibernate - 加载/获取
 - NHibernate - Linq
 - NHibernate - 查询语言
 - NHibernate - 标准查询
 - NHibernate - QueryOver 查询
 - NHibernate - 原生 Sql
 - NHibernate - 流畅的Hibernate
 
- NHibernate 有用资源
 - NHibernate - 快速指南
 - NHibernate - 有用的资源
 - NHibernate - 讨论
 
NHibernate - 流畅的Hibernate
在本章中,我们将介绍 Fluent NHibernate。Fluent NHibernate 是另一种映射方式,或者您可以说它是 NHibernate 标准 XML 映射文件的替代方法。而不是编写 XML (.hbm.xml 文件)文档。借助 Fluent NHibernate,您可以用强类型 C# 代码编写映射。
在 Fluent NHibernate 中,映射与应用程序的其余部分一起编译。
您可以轻松更改映射,就像更改应用程序代码一样,编译器将因任何拼写错误而失败。
它有一个传统的配置系统,您可以在其中指定覆盖命名约定和许多其他内容的模式。
您还可以设置事物的命名方式一次,然后 Fluent NHibernate 会完成剩下的工作。
让我们通过创建一个新的控制台项目来查看一个简单的示例。在本章中,我们将使用一个简单的数据库,其中有一个简单的 Customer 表,如下图所示。
安装 Fluent NHibernate
启动Fluent NHibernate的第一步是安装Fluent NHibernate包。因此,打开NuGet 包管理器控制台并输入以下命令。
PM> install-package FluentNHibernate
安装成功后,您将看到以下消息。
让我们添加一个简单的 Customer 模型类,以下程序显示了 Customer 类的实现。
using System; 
using System.Collections.Generic; 
using System.Linq;
using System.Text; 
using System.Threading.Tasks;
namespace FluentNHibernateDemo { 
   class Customer { 
      public virtual int Id { get; set; } 
      public virtual string FirstName { get; set; } 
      public virtual string LastName { get; set; } 
   } 
}
现在我们需要使用 Fluent NHibernate 创建映射,因此在您的项目中再添加一个类CustomerMap 。这是 CustomerMap 类的实现。
using FluentNHibernate.Mapping; 
using System; 
using System.Collections.Generic; 
using System.Linq; using System.Text; 
using System.Threading.Tasks;
namespace FluentNHibernateDemo { 
   class CustomerMap : ClassMap<Customer> { 
      public CustomerMap() { 
         Id(x => x.Id); 
         Map(x => x.FirstName); 
         Map(x => x.LastName); 
         Table("Customer"); 
      } 
   }
}
让我们添加另一个类NHibernateHelper,我们将在其中设置不同的配置设置。
using FluentNHibernate.Cfg; 
using FluentNHibernate.Cfg.Db; 
using NHibernate; 
using NHibernate.Tool.hbm2ddl;
namespace FluentNHibernateDemo { 
   public class NHibernateHelper { 
	
      private static ISessionFactory _sessionFactory;
		
      private static ISessionFactory SessionFactory { 
         get { 
            if (_sessionFactory == null)
            InitializeSessionFactory(); return _sessionFactory; 
         } 
      }
   
      private static void InitializeSessionFactory() { 
         _sessionFactory = Fluently.Configure() 
			
         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;
			
         .Database(MsSqlConfiguration.MsSql2008 .ConnectionString( 
            @"Data Source + Initial Catalog + Integrated Security + Connect Timeout
            + Encrypt + TrustServerCertificate + ApplicationIntent + 
            MultiSubnetFailover") .ShowSql() ) 
				
         .Mappings(m => m.FluentMappings
         .AddFromAssemblyOf<Program>()) 
         .ExposeConfiguration(cfg => new SchemaExport(cfg) 
         .Create(true, true)) 
         .BuildSessionFactory(); 
      }
		
      public static ISession OpenSession() { 
         return SessionFactory.OpenSession(); 
      } 
   }
}
现在让我们转到Program.cs文件,我们将在其中启动一个会话,然后创建一个新客户并将该客户保存到数据库中,如下所示。
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks;
namespace FluentNHibernateDemo { 
   class Program { 
	
      static void Main(string[] args) { 
		
         using (var session = NHibernateHelper.OpenSession()) { 
			
            using (var transaction = session.BeginTransaction()) { 
               var customer = new Customer { 
                  FirstName = "Allan", 
                  LastName = "Bomer" 
               }; 
					
               session.Save(customer); 
               transaction.Commit();
               Console.WriteLine("Customer Created: " + customer.FirstName + "\t" +
                  customer.LastName); 
            } 
				
            Console.ReadKey(); 
         } 
      } 
   } 
}
让我们运行您的应用程序,您将看到以下输出。
if exists (select * from dbo.sysobjects where id = object_id(N'Customer') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table Customer create table Customer ( Id INT IDENTITY NOT NULL, FirstName NVARCHAR(255) null, LastName NVARCHAR(255) null, primary key (Id) ) NHibernate: INSERT INTO Customer (FirstName, LastName) VALUES (@p0, @p1); select SCOPE_IDENTITY();@p0 = 'Allan' [Type: String (4000)], @p1 = 'Bomer' [Type: String (4000)] Customer Created: Allan Bomer
如您所见,新客户已创建。要查看客户记录,我们进入数据库并查看“查看数据”,您将看到添加了 1 个客户。
