NHibernate使用--进阶篇

Posted 程序黄金猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NHibernate使用--进阶篇相关的知识,希望对你有一定的参考价值。

上集我们说的搭建NHibernate和VS使用环境,判断环境是否兼容问题 下面我们就开始NHibernate的使用:

1.0  引用

  TestNHibernate.Data 层引用 Iesi.Collections.dll、NHibernate.dll、TestNHibernate.Domain.dll

  TestNHibernate.Domain层引用 Iesi.Collections.dll、NHibernate.dll

  TestNHibernate.Text层引用 NHibernate.dll、Iesi.Collections.dll、NHibernate.ByteCode.LinFu.dll,以及TestNHibernate.Data、TestNHibernate.Domain(检测即可,在上一集中已经引用过了)

 

2.0  使用

  在TestNHibernate.Domain类库下新建两个文件夹Entitys和Mappings--Entitys:存放实体类  Mappings: 存放与数据库表的映射配置文件 一般以.hbm.xml结尾,在这个过程中可以使用网上的一些工具,稍后本人使用过后再给大家推荐,现在我还是手写。

  我的数据库中有一张部门表Departments  有字段 Dept_id(部门编号 主键)  Dept_Name(部门名称)  DeptFath_id(父级部门),所以在Entitys文件夹下创建相应的类,

这里为了体现NHibernate配置文件,所以命名上可能需要和数据库有点儿差异,特别的在NHibernate中为了方便映射,强制规定属性必须用 virtual 关键字修饰

技术分享图片
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestNHibernate.Domain.Entitys
{
    public class MyDepartments
    {
        /// <summary>
        /// 部门编号
        /// </summary>
        public virtual int MyDept_id { get; set; }

        /// <summary>
        /// 部门名称
        /// </summary>
        public virtual string MyDept_Name { get; set; }


        /// <summary>
        /// 父级部门
        /// </summary>
        public virtual int MyDeptFath_id { get; set; }
    }
}
创建类MyDepartments

下面我们再来配置类MyDepartments的映射文件  在 文件夹Mappings下创建一个XML文档 MyDepartments.hbm.xml,映射文件命名一般类名+.hbm.xml

技术分享图片
<?xml version="1.0" encoding="utf-8" ?> 
生成的xml

下面我们来配置它

技术分享图片
<?xml version="1.0" encoding="utf-8" ?>
<!--assembly 必选属性当前映射文件所在程序集--><!-- namespace 当前映射的类所在的命名空间-->
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NewNHibernate.Domain" namespace="NewNHibernate.Domain.Entities">
  <!--开始配置一个类的映射  首先通过name指定要映射的类   table指的对应数据库中的表的表名-->
  <class name ="NewNHibernate.Domain.Entities.MyDepartments" table="Departments">
    <!--配置相应属性 id节点标识主键  name属性指类中的属性名称 column属性指数据库对应表中的对应字段 type 可以指定类型 我们这里默认就好-->
    <id name="MyDept_id" column ="Dept_id"><!--type="int"-->
      <!--generator 指定主键生成的方式 这里我们使用自动代理 class ="native" 也就是从数据库中获取-->
      <generator class ="native"/>
    </id>
    <!--配置普通属性使用 property节点 name属性指类中的属性名称 column属性指数据库对应表中的对应字段 type 可以指定类型 我们这里默认就好-->
    <property name ="Dept_Name" column="Dept_Name"/>
    <!--配置普通属性使用 property节点 name属性指类中的属性名称 column属性指数据库对应表中的对应字段 type 可以指定类型 我们这里默认就好-->
    <property name ="DeptFath_id" column="DeptFath_id"/>
  </class>
</hibernate-mapping>
配置后的MyDepartments.hbm.xml

注意:要想使得NHibernate可以映射文件成功 我们这里必须将XML的属性中的内容修改为嵌入的资源  右键 MyDepartments.hbm.xml属性--内容--嵌入的资源

EG:

 

以上是关于NHibernate使用--进阶篇的主要内容,如果未能解决你的问题,请参考以下文章

ORM篇——使用NHibernate配置对象实体的一些小问题

Kotlin基础从入门到进阶系列讲解(基础篇)Fragment的基本使用

Kotlin基础从入门到进阶系列讲解(基础篇)Fragment的基本使用

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

ORM篇——有关NHibernate查询封装

Atom编辑器入门到精通 Atom使用进阶