毕业后在西艾公司开始了第一份工作,一直都想把工作中的成长和学到的知识记录下来,不过实在有点懒,呵呵~这次就借培训的机会,把自己编写的一份培训资料放上来,算是个好的开头吧。

本人也是新手,写的不好的地方,请多原谅。如果发现有什么错误,请指出,我会更改的,谢谢!

本文章做探讨交流只用,欢迎转载,转载请注明出处,谢谢!

1、Hibernate.cfg.xml(配置文件名)置放于Bin文件夹下面(注意别把文件命名为NHibernate.cfg.xml,虽然通过指定文件方式可以实现,但是从方便使用上建议不要用)

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">

//03下版本为2.0

<session-factory name="Education">

<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>

//固定

<property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property>

//驱动提供者,根据数据库而定

<property name="connection.connection_string">Data Source=test;User Id=EDUCATION;Password=123;</property>

//连接字符串

<property name="show_sql">false</property>

//是否显示sql语句,调试之用

<property name="hibernate.dialect">NHibernate.Dialect.Oracle9Dialect</property>

//方言,就是数据库语言集,根据数据库而定

<mapping assembly="Education.Module" />

//编译程序集名称

</session-factory>

</hibernate-configuration>

NHibernate的配置也可以写在web.config文件中,不过建议分开配置,比较明了。很多时候大家刚刚开始使用的时候,这个配置文件运行中会报错,具体的错误我还没全部总结完,有些经常出现的错误如下:

1)报错说驱动版本错误或者方言找不到:这个首先你要确定你使用的驱动和方言跟你的数据库是对应的(每个数据库对应的驱动和方言可以从官方文档查询);其次,你要确定你没有写错驱动和方言的名称,这个很多人会经常犯错,写错写多写少字母,呵呵;最后,要是你确定了上面的步骤都没出错,那么请检查你使用的NHibernate版本是否正确,1.2跟2.0他们使用的驱动和方言名称有所不同。

2)程序集名称无法编译:你要确定你所指定的程序集存在并是你放置映射类和对应映射文件的类库,你可以右击相应的类库,然后从弹出的窗口上可以查看到当前类库的程序集名称是否正确。

3)无法链接数据库实例:这个首先确保你的数据库是可用的,有些数据库(如Oracle)是需要开启监听才可以正常使用的;其次,要检查的是你的连接字符串有没有写正确。

2、映射类的建立

public class CLASS

{

private string m_CLASSID;

……………..

public virtual string CLASSID

{

get { return m_CLASSID; }

set

{

if ( value != null)

if( value.Length > 20)

throw new ArgumentOutOfRangeException("Invalid value for CLASSID", value, value.ToString());

m_IsChanged |= (m_CLASSID != value); m_CLASSID = value;

}

}

//上面的set是比较全面的set,简单点可以直接set{ m_CLASSID = value;}

……………………….

}

这里有一个要注意的地方,映射类里面定义为public的属性和方法,都要加上virtual修饰。某些资料里说的是启用lazy属性的时候才需要这样,但是我们发现不启用也需要virtual修饰,大家可以研究一下原因。

映射类其实就是对应数据库的一张表,类里面的属性都是跟数据库的字段一一对应的(在没有表间关联的映射时,是最简单的形式),把数据库的表转换成对象在程序里处理,就让访问和操作变得很容易也很具体。

3、映射类的映射文件(后缀为.hbm.xml,跟对应的映射类置于同一文件夹下,设置为内嵌资源)

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">

<class name="Education.Module.CLASS,Education.Module" table="CLASS" lazy="true">

Name属性,前一个是对应的映射类的全限定名,第二个为类的程序集名。(建议设成一样)

<id name="CLASSID" column="CLASSID" type="String">

<generator class="sequence">

<param name="sequence">Class_ID_seq</param>

</generator>

</id>

<property column="NAME" type="String" name="NAME" not-null="true" length="20" />

<property column="STUDENTNUM" type="Decimal" name="STUDENTNUM" />

<property column="REMARK" type="String" name="REMARK" length="100" />

</class>

</hibernate-mapping>

映射文件里面的id节的配置,主要是一个generator的配置,可参考文档。常用的有assigned(程序指定),sequence(Oracle序列),identity(DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的自增类型),foreign(外部引用,表间关联使用,跟一对一关系结合)。

映射文件里属性的配置就是name(属性的名字),column(数据库里的字段名,不指出的话默认跟name相同),type(类型,应用程序里的)。

4、VS2005里使用NHibernate的步骤

首先,创建一个Configuration对象

Configuration对象能够解析所有.Net对象和后台数据库中的映射关系。

Configuration cfg = new Configuration();

cfg.Configure();

cfg.AddAssembly("NHibernate.Examples");

//或在配置文件中配置程序集名

Configuration对象会搜索装配件里的任何以hbm.xml 结尾的文件。还有其他方法加载映射文件,但这种方式是最简单的。

下一步,创建一个Session对象

ISession对象提供一个到后台数据库的连接,ITransaction对象提供一个可以被NHibernate管理的事务。

ISessionFactory factory = cfg.BuildSessionFactory();

ISession session = factory.OpenSession();

ITransaction transaction = session.BeginTransaction();

……………………..

transaction.Commit();

在我们的项目中,使用SessionFactory类来完成以上的步骤,

using (session = SessionFactory.Instance.Factory.OpenSession())

{

IList<CLASS> classl = session.CreateCriteria(typeof(CLASS)).List<CLASS>();

}

return classl;

NHibernate查询的主要方法是CreateCriteria,还有Load(修改);添加记录的方法是Save;删除是Delete;

转载于:https://www.cnblogs.com/xmonkey2001/archive/2009/01/15/1376049.html

NHibernate1.2在VS2005里使用的基础相关推荐

  1. VS2005里自定义控件设计时语法

    VS2005里自定义控件设计时语法 首先声明下面代码只能用于桌面_NET,不适用于NETCF. 另外,内容很菜鸟,因为本人04年出道,自认仍然是菜鸟,老鸟略过. 控件写了不少,底层的上层的都有,但是一 ...

  2. python匿名函数里用for_Python基础之(内置函数、匿名函数、递归)

    一.内置函数 1.1.作用域相关 locals() #以字典的类型返回当前位置的全部局部变量. globals() #以字典的类型返回全部全局变量. 1.2.迭代器生成器相关 range() #可创建 ...

  3. GitHub里的MySQL基础架构自动化测试

    原文:MySQL infrastructure testing automation at GitHub 作者:tomkrouper && shlomi-noach 翻译:Diwei ...

  4. 姐姐半夜不睡觉,既然偷偷在被窝里偷看HTML基础⭐

    HTML基础 HTML是什么 文件命名规范 先来看看html文件的基础结构 html基础语法 常用标签 文本标题标签 字体加粗和倾斜 段落标签:p标签 常见的字体标记 常用转义字符 列表 a标签(超链 ...

  5. 扩展欧几里得定理基础讲解 代码及证明

    知识储备 1 . 朴素欧几里得原理:gcd(a,b) == gcd(b,a % b) 2 . 负数取模:忽略符号返回绝对值就好了 3 . 模数原理:对于整数a,b必然存在整数k使得a % b == a ...

  6. 计算机里FC方式,【计算机基础】在0和1的世界里来来回回

    事物的正反两面被哲学家讨论了几千年.计算机里的0和1也照旧玩出了各种花样. 二进制数 VS 十进制数 本小节讲二进制写法,以及到十进制的转换方法,如果已熟悉这些内容可以直接跳到下一小节. 我们生活在一 ...

  7. 大学所有专业都要学c语言吗,是不是大学里的所有专业都会学一些计算机基础内容...

    是不是大学里的所有专业都会学一些计算机基础内容以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 是不是大学里的所有专业都会 ...

  8. VS2005+SQL2005 ASP.NET2.0数据库连接

                                              VS2005+SQL2005 ASP.NET2.0数据库连接 对于的新手来说,整个数据库连接不太容易,根据连接过程中 ...

  9. HTML与CSS基础知识补遗(一)

    开始从零基础系统地学习前端知识了,虽说html和css多少了解一些,但是学着还是能发现很多新大陆.... 一. HTML中head标签 1. <meta>标签: meta标签里是一些基础的 ...

  10. Python基础教程:连接列表的八种方法,你都知道吗?

    Python 语言里有许多(而且是越来越多)的高级特性,是 Python 发烧友们非常喜欢的.在这些人的眼里,能够写出那些一般开发者看不懂的高级特性,就是高手,就是大神. 但你要知道,在团队合作里,炫 ...

最新文章

  1. HDOJ_ACM_折线分割平面
  2. python 二叉树中所有距离为k的节点_leetcode 二叉树中所有距离为 K 的结点
  3. .net程序打包的几篇文章
  4. 北斗导航 | C语言实现PPP(精密单点定位)
  5. 常对象成员和常成员函数
  6. Angular self study 3 - data binding
  7. 驱动程序操作IO口API函数
  8. Jonathan Bryce说:OpenStack属于全世界,并不属于一个公司,也不会属于一个国家……...
  9. 直播为什么不使用WebRTC?
  10. 大学生起诉小米获赔流量费1元
  11. 在开发过程中调试报表插件详细教程
  12. Java 开发者最困惑的四件事
  13. “base-64 字符数组的无效长度”错误解决方案
  14. python xps_XPS 15 9560 安装 Ubuntu 18.04
  15. 计算机视觉技术与应用综述
  16. 锁相环(PLL)专题一:鉴相器PD
  17. 复制知乎专栏文章的方法
  18. 【网络自定向下学习】——TCP报文段的详细解析
  19. html a标签打开新页面,A标签新窗口打开怎么设置
  20. Quartz定时任务过期处理策略

热门文章

  1. 为什么python除法结果会有小数点0_22. 为什么 Python 中的整除是向下取整?
  2. css3美话网页元素
  3. Python PEP8 编码规范 代码布局
  4. 浙江大学的”程序设计入门-C语言课程“截图
  5. BZOJ 3831 POI2014 Litter Bird
  6. 一个普通的 Zepto 源码分析(一) - ie 与 form 模块
  7. Rsyslog的模板template详解
  8. java验证邮件正则
  9. 2019牛客多校第二场F Partition problem(暴搜)题解
  10. JavaScript基础流程控制(3)