1、链接配置

 <?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory name="Test">
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Server=.;initial catalog=TestNHibernate;User Id=sa;Password=Hello1234</property>
<property name="adonet.batch_size"></property>
<property name="show_sql">true</property>
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="use_outer_join">true</property>
<property name="command_timeout"></property>
<property name="query.substitutions">true , false , yes 'Y', no 'N'</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<mapping assembly="TestDomain" />
</session-factory>
</hibernate-configuration>

hibernate.cfg.xml

2、构建一个Session管理类,用于管理Session

     internal class SessionManager
{
private ISessionFactory _sessionFactory;
public SessionManager()
{
_sessionFactory = GetSessionFactory();
}
private ISessionFactory GetSessionFactory()
{
return (new Configuration()).Configure().BuildSessionFactory();
}
public ISession GetSession()
{
return _sessionFactory.OpenSession();
}
}

SessionManager

3、构建仓储基类,以便继承

     public class BaseRespository<TEntity>
where TEntity : class,new()
{
protected ISession session;
public ISession Session
{
set
{
session = value;
}
} #region
public BaseRespository()
{
session = (new SessionManager()).GetSession();
}
#endregion public void Create(TEntity dto)
{
CreateTransaction(dto);
} public int CreateAndReturn(TEntity dto)
{
return CreateTransaction(dto);
} public int CreateTransaction(TEntity dto)
{
using (ITransaction tx = session.BeginTransaction())
{
try
{
int newId = (int)session.Save(dto);
session.Flush();
tx.Commit();
return newId;
}
catch (HibernateException)
{
tx.Rollback();
throw;
}
}
} public void Update(TEntity dto)
{
session.Update(dto);
session.Flush();
} public void SaveOrUpdate(IList<TEntity> dtos)
{
foreach (var c in dtos)
{
session.SaveOrUpdate(c);
}
session.Flush();
} public void Delete(TEntity dto)
{
session.Delete(dto);
session.Flush();
} public TEntity GetById(object entityId)
{
return this.session.Get<TEntity>(entityId);
} public IList<TEntity> GetListByExample(TEntity entity)
{
return this.session.CreateCriteria(typeof(TEntity))
.Add(Example.Create(entity)
.IgnoreCase()
.EnableLike()
.SetEscapeCharacter('&')
).List<TEntity>();
} public IList<TEntity> List()
{
return session.CreateCriteria(typeof(TEntity)).List<TEntity>();
} public IList<TEntity> List(params ICriterion[] expression)
{
ICriteria query = session.CreateCriteria(typeof(TEntity));
foreach (ICriterion express in expression)
{
query.Add(express);
}
return query.List<TEntity>();
} public IList<TResult> Select<TResult>(Func<TEntity, TResult> express)
{
return session.CreateCriteria(typeof(TEntity)).List<TEntity>().Select(express).ToList();
}
}

BaseRespository

4、创建领域实体对象

     public class Blogcategory
{
public Blogcategory() { }
public virtual int Cateid { get; set; }
public virtual IList<Blogarticle> Blogarticles { get; set; }
public virtual string Catename { get; set; }
public virtual int Parentid { get; set; }
public virtual int State { get; set; }
public virtual int Sortid { get; set; }
public virtual int Articlecount { get; set; }
public virtual System.DateTime Createtime { get; set; }
public virtual string Note { get; set; }
}

Blogcategory

     public class Blogarticle
{
public Blogarticle() { }
public virtual int Articleid { get; set; }
public virtual Blogcategory Blogcategory { get; set; }
public virtual IList<Blogcomment> Blogcomments { get; set; }
public virtual IList<Blogdigg> Blogdiggs { get; set; }
public virtual string Title { get; set; }
public virtual string Content { get; set; }
public virtual string Description { get; set; }
public virtual string Imageurl { get; set; }
public virtual string Tag { get; set; }
public virtual int Hits { get; set; }
public virtual bool Istop { get; set; }
public virtual int State { get; set; }
public virtual System.Nullable<int> Userid { get; set; }
public virtual string Username { get; set; }
public virtual string Userip { get; set; }
public virtual System.DateTime Createtime { get; set; }
public virtual System.DateTime Publishtime { get; set; }
public virtual System.DateTime Updatetime { get; set; }
public virtual string Note { get; set; }
}

Blogarticle

     public class Blogcomment
{
public Blogcomment() { }
public virtual int Autoid { get; set; }
public virtual Blogarticle Blogarticle { get; set; }
public virtual string Title { get; set; }
public virtual System.Nullable<int> Userid { get; set; }
public virtual string Username { get; set; }
public virtual string Content { get; set; }
public virtual System.DateTime Createtime { get; set; }
public virtual string Ip { get; set; }
public virtual int State { get; set; }
public virtual System.Nullable<int> Verifyuserid { get; set; }
public virtual string Verifyuseraccount { get; set; }
}

Blogcomment

     public class Blogdigg
{
public Blogdigg() { }
public virtual int Autoid { get; set; }
public virtual Blogarticle Blogarticle { get; set; }
public virtual string Diggname { get; set; }
public virtual int Surpporttype { get; set; }
public virtual int State { get; set; }
public virtual string Ip { get; set; }
public virtual System.DateTime Createtime { get; set; }
}

Blogdigg

5、映射文件配置

 <?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="TestDomain" namespace="TestDomain" xmlns="urn:nhibernate-mapping-2.2" default-lazy="false">
<class name="Blogcategory" table="BlogCategory">
<id name="Cateid" column="CateID">
<generator class="native" />
</id>
<property name="Catename" column="CateName" />
<property name="Parentid" column="ParentID" />
<property name="State" column="State" />
<property name="Sortid" column="SortID" />
<property name="Articlecount" column="ArticleCount" />
<property name="Createtime" column="CreateTime" />
<property name="Note" column="Note" />
</class>
</hibernate-mapping>

Blogcategory.hbm.xml

 <?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="TestDomain" namespace="TestDomain" xmlns="urn:nhibernate-mapping-2.2" default-lazy="false">
<class name="Blogarticle" table="BlogArticle">
<id name="Articleid" column="ArticleID">
<generator class="native" />
</id>
<many-to-one name="Blogcategory" column="BlogCategory_CateID" />
<property name="Title" column="Title" />
<property name="Content" column="Content" />
<property name="Description" column="Description" />
<property name="Imageurl" column="ImageUrl" />
<property name="Tag" column="Tag" />
<property name="Hits" column="Hits" />
<property name="Istop" column="IsTop" />
<property name="State" column="State" />
<property name="Userid" column="UserID" />
<property name="Username" column="UserName" />
<property name="Userip" column="UserIP" />
<property name="Createtime" column="CreateTime" />
<property name="Publishtime" column="PublishTime" />
<property name="Updatetime" column="UpdateTime" />
<property name="Note" column="Note" />
</class>
</hibernate-mapping>

Blogarticle.hbm.xml

 <?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="TestDomain" namespace="TestDomain" xmlns="urn:nhibernate-mapping-2.2">
<class name="Blogcomment" table="BlogComment" lazy="false" >
<id name="Autoid" column="AutoID">
<generator class="native" />
</id>
<many-to-one name="Blogarticle" column="BlogArticle_ArticleID" />
<property name="Title" column="Title" />
<property name="Userid" column="UserID" />
<property name="Username" column="UserName" />
<property name="Content" column="Content" />
<property name="Createtime" column="CreateTime" />
<property name="Ip" column="IP" />
<property name="State" column="State" />
<property name="Verifyuserid" column="VerifyUserID" />
<property name="Verifyuseraccount" column="VerifyUserAccount" />
</class>
</hibernate-mapping>

Blogcomment.hbm.xml

 <?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="TestDomain" namespace="TestDomain" xmlns="urn:nhibernate-mapping-2.2">
<class name="Blogdigg" table="BlogDigg" lazy="false" >
<id name="Autoid" column="AutoID">
<generator class="native" />
</id>
<many-to-one name="Blogarticle" column="BlogArticle_ArticleID" />
<property name="Diggname" column="DiggName" />
<property name="Surpporttype" column="SurpportType" />
<property name="State" column="State" />
<property name="Ip" column="IP" />
<property name="Createtime" column="CreateTime" />
</class>
</hibernate-mapping>

Blogdigg.hbm.xml

6、构建仓储类

     public class BlogCategoryRespository : BaseRespository<Blogcategory>
{ }
public class BlogArticleRespository : BaseRespository<Blogarticle>
{ }

7、测试

     class Program
{
static void Main(string[] args)
{
BlogCategoryRespository target = new BlogCategoryRespository();
Blogcategory dto = new Blogcategory(); dto.Catename = "Test" + new Random().Next(, ).ToString();
dto.Parentid = ;
dto.State = ;
dto.Createtime = DateTime.Now; int newid = target.CreateAndReturn(dto); Blogcategory model = target.GetById();
if (model != null)
{
model.Catename = "newCatename";
target.Update(model);
} model = target.GetById();
if (model != null)
{
target.Delete(model);
} Console.WriteLine(newid);
Console.Read();
}
}

NHibernate下载地址:

  1. http://sourceforge.net/projects/nhibernate/
  2. http://www.nuget.org/packages/NHibernate/
  3. http://hibernate.org/

NHibernate参考手册:NHibernate.chm.rar

Nhibernate基本的增删改查实践的更多相关文章

  1. 大数据系列之分布式数据库HBase-0.9.8安装及增删改查实践

    若查看HBase-1.2.4版本内容及demo代码详见 大数据系列之分布式数据库HBase-1.2.4+Zookeeper 安装及增删改查实践 1. 环境准备: 1.需要在Hadoop启动正常情况下安 ...

  2. 大数据系列之分布式数据库HBase-1.2.4+Zookeeper 安装及增删改查实践

    之前介绍过关于HBase 0.9.8版本的部署及使用,本篇介绍下最新版本HBase1.2.4的部署及使用,有部分区别,详见如下: 1. 环境准备: 1.需要在Hadoop[hadoop-2.7.3]  ...

  3. Mybatis连接Oracle实现增删改查实践

    1. 首先要在项目中增加Mybatis和Oracle的Jar文件 这里我使用的版本为ojdbc7 Mybatis版本为:3.2.4 2. 在Oracle中创建User表 create table T_ ...

  4. 一个使用MVC3+NHibernate “增删改查” 的项目

    一个使用MVC3+NHibernate “增删改查” 的项目  前言: 谈到NHibernate大伙并不陌生,搞Java的更是清楚,Hibernate是一个目前应用的最广泛的开放源代码的对象关系映射框 ...

  5. MVC项目实践,在三层架构下实现SportsStore-11,使用Knockout实现增删改查

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  6. 【C#】使用NHibernate连接MySQL数据库及增删改查

    学习资料 http://www.sikiedu.com/course/51/task/891/show https://www.codeproject.com/Articles/26123/NHibe ...

  7. NHibernate初学一之简单增删改查

    以前有简单了解NHibernate,但因项目一直没有运用所以也没有机会进行一个详细了解:最近利用一点空闲的时间认真学习它:同样希望把学习过程进行简单记录,今天简单写一个针对MSSQL数据库的增删改查的 ...

  8. 一个使用MVC3+NHibernate “增删改查” 的项目(修正版)

      前言: 谈到NHibernate大伙并不陌生,搞Java的更是清楚,Hibernate是一个目前应用的最广泛的开放源代码的对象关系映射框架,它对Java的JDBC(类似于ADO.Net)进行了非常 ...

  9. 使用NHibernate连接MySQL数据库及增删改查

    学习资料 http://www.sikiedu.com/course/51/task/891/show https://www.codeproject.com/Articles/26123/NHibe ...

随机推荐

  1. django+xadmin在线教育平台(二)

    老话总是没错的,工欲善其事,必先利其器 教你安装pycharm,mysql,navicat,python相关环境. windows下搭建开发环境 2-1 pycharm,mysql,Navicat安装 ...

  2. mybatis中实现动态SQL

    动态SQL语句,也就意味着SQL语句不在是一成不变的而是具有多样性. if if的用法还是跟平常差不多的(不过没有else if也没有else) <update id="modify& ...

  3. DeepFaceLab进阶(4):通过Colab免费使用Tesla K80 跑模型!

    当学会了换脸软件DeepFaceLab基本使用,各种参数配置,各有优化技能之后.唯一约束你的可能是电脑配置. CPU能跑,但是慢到怀疑人生,低配模型都得跑一周 低配显卡,显存不够,H128 根本就跑不 ...

  4. PHP 根据IP获取地理位置

    /** * 根据用户IP获取用户地理位置 * $ip 用户ip */ function get_position($ip){ if(empty($ip)){ return '缺少用户ip'; } $u ...

  5. relu函数为分段线性函数,为什么会增加非线性元素

    relu函数为分段线性函数,为什么会增加非线性元素 我们知道激活函数的作用就是为了为神经网络增加非线性因素,使其可以拟合任意的函数.那么relu在大于的时候就是线性函数,如果我们的输出值一直是在大于0 ...

  6. Linux安全层详解

    1 bastion(安全堡垒系统)通常配置两个服务: 1 服务定义系统的功能: 2 服务支持远程访问: 原则: 1 不需要某个软件卸载掉: 2 需要某个软件但不使用就不要激活: 为各个bastion系 ...

  7. HDU1272小希的迷宫

    小希的迷宫 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一 ...

  8. firewall-cmd 防火墙命令详解 及 TCP Wrappers

    firewall-cmd 常用参数及作用 参数 作用 --get-default-zone 查询默认的区域名称 --set-default-zone=<区域名称> 设置默认的区域,使其永久 ...

  9. FreeMarker的<#if></#if>标签

    <#if target??> xxxx </#if> 上面这段代码判断target??是否为null,如果不为null时才可以执行if里面的内容,为null时则不进到 if里面 ...

  10. Maven web项目的项目如何创建

    1.eclipse--创建maven项目--选择打包方式为war 2.此时项目还缺少一些东西,比如web-inf,web.xml配置文件之类的 3.项目右键-properties-project fa ...