NHibernate初学一之简单增删改查(一)

2014-11-24 02:08:36 · 作者: · 浏览: 2
以前有简单了解NHibernate,但因项目一直没有运用所以也没有机会进行一个详细了解;最近利用一点空闲的时间认真学习它;同样希望把学习过程进行简单记录,今天简单写一个针对MSSQL数据库的增删改查的小实例,作为进行学习NHibernate第一步
一:ORM理论
ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另一种形式。数据持久化:就是将内存中的 数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。在应用程序中能永久地保存各个处理状态信息的机制。如果没有持久化这个机制,状态只能保存在内存中,机器关机后就会丢失。
二:NHibernate简介
NHibernate就是用于做数据持久化相关的编程工作,能够使开发人员从原来枯燥的SQL语句的编写中解放出来,解放出来的精力可以让开发人员投入到业务逻辑的实现。NHibernate是由一个Java开源项目Hibernate发展来而来。与数据库打交道主要是用NHibernate,NHibernate的开发者尝试为其提供与Hibernate类似的API。使用前我们需要 下载Nhibernate,
下载地址:http://sourceforge.net/projects/nhibernate/files/NHibernate/。
NHibernate-3.3.3.GA-src.zip 是源文件,里面有源代码以及连接各种 数据库的写法模板。
NHibernate-3.3.3.GA-bin.zip 是使用文件,解压后能直接使用的dll。在接下的实例中,使用的NHibernate-3.3.3GA版本
三:NHibernate实例
实例中解决方案简单的创建三层架构,符合开发过程中最简单的运用;
1:首先在数据库中创建一个表T_School,脚本如下:
复制代码
USE [TestDb]
GO
/****** 对象: Table [dbo].[T_School] 脚本日期: 03/01/2014 19:45:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[T_School](
[ID] [uniqueidentifier] NOT NULL,
[SchoolName] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL,
[BuildDate] [datetime] NULL,
[Address] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[IsSenior] [bit] NULL,
[StudentNum] [int] NULL
) ON [PRIMARY]
复制代码
2:创建实体层Model,实体中的字段还以virtual进行修饰
复制代码
namespace Wujy.ModelLibrary.Entity
{
public class SchoolModel
{
///
/// ID
///
public virtual Guid ID
{
get;
set;
}
///
/// SchoolName
///
public virtual string SchoolName
{
get;
set;
}
///
/// BuildDate
///
public virtual DateTime BuildDate
{
get;
set;
}
///
/// Address
///
public virtual string Address
{
get;
set;
}
///
/// 高级
///
public virtual bool IsSenior
{
get;
set;
}
///
/// 人数
///
public virtual int StudentNum
{
get;
set;
}
}
}
复制代码
2.1 此处还增加NHibernate需要的XML映射文件,以实体名+hbm.xml结尾并且还要设置其生成操作为"嵌入的资源";其中Class中的name是指实体类的完整名及类库名称,代码如下
复制代码
< xml version="1.0" encoding="utf-8" >
复制代码
3:创建一个类库作为DAL层,此处我们引用NHibernate两个DLL,分别为NHibernate.dll及Iesi.Collection.dll;此处创建一个帮助类NHibernateHelper用于ISessionFactory;
复制代码
using NHibernate;
using NHibernate.Cfg;
namespace Wujy.DalLibrary.DalHelp
{
public class NHibernateHelper
{
private ISessionFactory _sessionFactory;
public NHibernateHelper()
{
_sessionFactory = GetSessionFactory();
}
private ISessionFactory GetSessionFactory()
{
return (new Configuration()).Configure().BuildSessionFactory();
}
public ISession GetSession()
{
return _sessionFactory.OpenSession();
}
}
}
复制代码
3.1:创建类SchoolDal并把一些操作的代码写入,如查不用transaction.Commit()则要运和isession.Flush()否则无法执行SQ