NHibernate使用简单示例
NHibernate使用小示例
1.新建Model类库项目。
使用代码生成器生成Model类。
此处以简单的UserInfo表作为示例。
注意字段前必须以 virtual 修饰。
namespace Model { public partial class UserInfo { public virtual System.Int32 Id { get; set; } public virtual System.String Name { get; set; } } }
2.编写映射实体类与数据库的映射文件。
新建一个xml文件,并且命名为 UserInfo.hbm.xml 此处必须以 表名.hbm.xml 结尾,并将其生成操作改为“嵌入的资源”,因为NHibernate会以这种方式寻找映射关系。
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Model" namespace="Model"> <class name="Model.UserInfo" table="UserInfo"> <id name="Id" column="Id" type="int"></id> <property name="Name" column="Name" type="string" /> </class> </hibernate-mapping>
3.新建一个DAL类库项目。
新建一个NHibernateHelper类,作为生产和管理Session的工厂。
namespace DAL { public class NHibernateHelper { private ISessionFactory _sessionFactory; public NHibernateHelper() { _sessionFactory = GetSessionFactory(); } private static ISessionFactory GetSessionFactory() { return (new Configuration()).Configure().BuildSessionFactory(); } public ISession GetSession() { return _sessionFactory.OpenSession(); } } }
保证每一个NHibernate类的对象只有一个Session。
4.新建一个UserInfoDAL类,实现对UserInfo数据的增删改查。
namespace DAL { public partial class UserInfoDAL { private ISession _isession; public UserInfoDAL() { _isession = new NHibernateHelper().GetSession(); } public void Add(UserInfo u) { _isession.Save(u); _isession.Flush(); } public bool Update(UserInfo u) { try { _isession.Update(u); _isession.Flush(); return true; } catch (Exception ex) { return false; } finally { _isession.Close(); } } public bool Delete(UserInfo u) { try { _isession.Delete(u); _isession.Flush(); return true; } catch (Exception ex) { return false; } finally { _isession.Close(); } } public UserInfo GetById(int id) { return _isession.Get<UserInfo>(id); } public IList<UserInfo> GetList() { IList<UserInfo> list = _isession.QueryOver<UserInfo>().List(); return list; } } }
5.新建控制台测试项目调用
由于BLL和UI层不是本文重点,所以没有考虑依赖注入、分层、接口等,本文主要介绍是NHibernate的配置。
在控制台项目中添加xml文件,名字为 hibernate.cfg.xml 不可更改,并且修改为“如果较新则复制”。