NHibernate1.2在VS2005里使用的基础
毕业后在西艾公司开始了第一份工作,一直都想把工作中的成长和学到的知识记录下来,不过实在有点懒,呵呵~这次就借培训的机会,把自己编写的一份培训资料放上来,算是个好的开头吧。
本人也是新手,写的不好的地方,请多原谅。如果发现有什么错误,请指出,我会更改的,谢谢!
本文章做探讨交流只用,欢迎转载,转载请注明出处,谢谢!
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里使用的基础相关推荐
- VS2005里自定义控件设计时语法
VS2005里自定义控件设计时语法 首先声明下面代码只能用于桌面_NET,不适用于NETCF. 另外,内容很菜鸟,因为本人04年出道,自认仍然是菜鸟,老鸟略过. 控件写了不少,底层的上层的都有,但是一 ...
- python匿名函数里用for_Python基础之(内置函数、匿名函数、递归)
一.内置函数 1.1.作用域相关 locals() #以字典的类型返回当前位置的全部局部变量. globals() #以字典的类型返回全部全局变量. 1.2.迭代器生成器相关 range() #可创建 ...
- GitHub里的MySQL基础架构自动化测试
原文:MySQL infrastructure testing automation at GitHub 作者:tomkrouper && shlomi-noach 翻译:Diwei ...
- 姐姐半夜不睡觉,既然偷偷在被窝里偷看HTML基础⭐
HTML基础 HTML是什么 文件命名规范 先来看看html文件的基础结构 html基础语法 常用标签 文本标题标签 字体加粗和倾斜 段落标签:p标签 常见的字体标记 常用转义字符 列表 a标签(超链 ...
- 扩展欧几里得定理基础讲解 代码及证明
知识储备 1 . 朴素欧几里得原理:gcd(a,b) == gcd(b,a % b) 2 . 负数取模:忽略符号返回绝对值就好了 3 . 模数原理:对于整数a,b必然存在整数k使得a % b == a ...
- 计算机里FC方式,【计算机基础】在0和1的世界里来来回回
事物的正反两面被哲学家讨论了几千年.计算机里的0和1也照旧玩出了各种花样. 二进制数 VS 十进制数 本小节讲二进制写法,以及到十进制的转换方法,如果已熟悉这些内容可以直接跳到下一小节. 我们生活在一 ...
- 大学所有专业都要学c语言吗,是不是大学里的所有专业都会学一些计算机基础内容...
是不是大学里的所有专业都会学一些计算机基础内容以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 是不是大学里的所有专业都会 ...
- VS2005+SQL2005 ASP.NET2.0数据库连接
VS2005+SQL2005 ASP.NET2.0数据库连接 对于的新手来说,整个数据库连接不太容易,根据连接过程中 ...
- HTML与CSS基础知识补遗(一)
开始从零基础系统地学习前端知识了,虽说html和css多少了解一些,但是学着还是能发现很多新大陆.... 一. HTML中head标签 1. <meta>标签: meta标签里是一些基础的 ...
- Python基础教程:连接列表的八种方法,你都知道吗?
Python 语言里有许多(而且是越来越多)的高级特性,是 Python 发烧友们非常喜欢的.在这些人的眼里,能够写出那些一般开发者看不懂的高级特性,就是高手,就是大神. 但你要知道,在团队合作里,炫 ...
最新文章
- WinSock学习笔记
- java调C接口_java通过jni调用C程序接口
- 天猫浏览型应用的CDN静态化架构演变(转)
- P3165 [CQOI2014]排序机械臂
- 算法测试及对比度进一步增强
- 写好代码,拒绝一传到底的参数类
- 让AI鲜活起来:自然语言理解及智能语音训练营
- Ubuntu 16.04 安装iNode客户端
- 最新WIN10系统封装教程2019系列(六)——常规软件安装
- 如何在Excel批量查询电话号码归属地?
- SSM项目实战之十:用户信息查询
- jdk没有jre的解决方法
- winserver 2016密钥
- JAVA 大文件压缩极速下载
- Laravel8 小程序手机号获取验证码登录
- 2021级天狮学院经济管理学院市场营销专升本专业辅导员及新生群
- 开头th_是什么文件_以th开头的英文单词th开头的所有英文单词
- Linux Ubuntu 鼠标变为十字架锁死解决办法
- 《老梁四大名著情商课》笔记- 别慌,情商是可以提升的
- MyBatis SSM