NHibernate1.2在VS2005里使用的基础

来源:互联网 发布:orcale数据库字典原理 编辑:程序博客网 时间:2024/06/07 14:24

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


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


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


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(程序指定),sequenceOracle序列),identityDB2,MySQL, MS SQL Server, SybaseHypersonicSQL自增类型),foreign(外部引用,表间关联使用,跟一对一关系结合)。

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

 

应用程序跟NHibernate交互,NHibernate通过映射类还有每个类对应的映射文件来对数据库进行操作。

NHibernate


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

 

原创粉丝点击