- NHibernate 教程
- NHibernate - 首页
- NHibernate - 概述
- NHibernate - 架构
- NHibernate - ORM
- NHibernate - 环境设置
- NHibernate - 开始入门
- NHibernate - 基本ORM
- NHibernate - 基本CRUD操作
- NHibernate - 性能分析器
- 为映射文件添加IntelliSense
- NHibernate - 数据类型映射
- NHibernate - 配置
- NHibernate - 重写配置
- NHibernate - 批处理大小
- NHibernate - 缓存
- NHibernate - 组件映射
- NHibernate - 关系
- NHibernate - 集合映射
- NHibernate - 级联操作
- NHibernate - 延迟加载
- NHibernate - 反向关系
- NHibernate - Load/Get
- NHibernate - LINQ
- NHibernate - 查询语言
- NHibernate - Criteria 查询
- NHibernate - QueryOver 查询
- NHibernate - 原生SQL
- NHibernate - 流畅的NHibernate
- NHibernate 有用资源
- NHibernate - 快速指南
- NHibernate - 有用资源
- NHibernate - 讨论
NHibernate - 流畅的NHibernate
本章将介绍流畅的NHibernate。流畅的NHibernate是另一种映射方式,或者可以说它是NHibernate标准XML映射文件的替代方案。它无需编写XML(.hbm.xml文件)文档。借助流畅的NHibernate,您可以使用强类型C#代码编写映射。
在流畅的NHibernate中,映射与应用程序的其余部分一起编译。
您可以像修改应用程序代码一样轻松更改映射,编译器会报错任何拼写错误。
它具有传统的配置系统,您可以在其中指定用于覆盖命名约定和许多其他事物的模式。
您也可以一次设置命名方式,然后流畅的NHibernate完成其余工作。
让我们来看一个简单的示例,创建一个新的控制台项目。本章将使用一个简单的数据库,其中包含一个简单的客户表,如下面的图片所示。
安装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; }
}
}
现在我们需要使用流畅的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个客户。
广告