柚子Nan--回归原点

Everything can be as easy as you like or as complex as you need.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

NHibernate 使用手迹(1st)

Posted on 2005-05-25 09:27  柚子Nan  阅读(2154)  评论(14)    收藏  举报

初次使用这个东西,简单的功能使用起来好像也不复杂,但也许非常高深(正像我的宣言:Everything can be as easy as you like or as complex as you need.)

 

[Identity主键]

关于一个表的主键问题,我用的是Identity(自动分配),

<id name="CustomerID" type="Int32" unsaved-value="0">

            <generator class="identity"/>

        </id>

这样,我在Web层就不需要对Customer.CustomerID赋值了(在SQL Server中也要设置该字段为Identity),这样非常好,第一次插入的时候Customer=1,然后每次都递增。当我把数据库中的数据全部清空,重现插入的时候,这个ID就不是从1开始了,而是你上次插入的最后一个值+1,什么意思呢?如果我第一次插入了5条客户,那么此时最大的CustomerID=5,当我把数据从SQL Server清空后,再插入竟然是从6开始,而不是1。我刚开始想NHibernate的缓存这么强?我就注销机器,试过还是6,我就清空IE缓存,历史浏览数据,结果还是,重新启动机器竟然还是6NHibernate太强了吧,他把这个当前纪录的号码放到哪里了?

 

[事务处理]

刚开始的时候,不想把事务放在业务逻辑中,而是想做一个但单独的事务控制程序,所以就没有写事务代码,昨晚第一次用的时候发现Save会报异常,然后加上就好了,今天我把事务又去掉,竟然还可以。

              ISession session = SessionFactory.OpenSession();
//            ITransaction trans = session.BeginTransaction();
              session.Save(obj);
//            trans.Commit();
              session.Close();


那么对于UpdateDelete,如果没有启动和关闭事务,那么这两个操作不会报异常,但是数据也不会更新和删除。看来事务在NHibernate中是个Required的东西,

 

另外,还遇到2个问题,现在好像又没有了,就不写上来了。同样的环境,同样的代码,奇怪着呢!

 

[一点感觉]

对于数据的插入,更新,删除操作已经进行了很好的封装,让我忘记了ADO.NET的很多类,就像我从来都不知道有SQLConnectionDataAdapterSQLCommand一样。

Nhibernate可以帮助你把更大的精力投入到Domain Model的设计上,而不是数据如何存储到数据库中。有个同事感叹,为什么OO面世这么多年了,就为什么没有什么像样的项目用纯粹的OO开发?