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 不可更改,并且修改为“如果较新则复制”。

 

posted @ 2015-04-26 18:01  Sunnier  阅读(1117)  评论(1编辑  收藏  举报