初次使用这个东西,简单的功能使用起来好像也不复杂,但也许非常高深(正像我的宣言: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缓存,历史浏览数据,结果还是,重新启动机器竟然还是6,NHibernate太强了吧,他把这个当前纪录的号码放到哪里了?
[事务处理]
刚开始的时候,不想把事务放在业务逻辑中,而是想做一个但单独的事务控制程序,所以就没有写事务代码,昨晚第一次用的时候发现Save会报异常,然后加上就好了,今天我把事务又去掉,竟然还可以。
ISession session = SessionFactory.OpenSession();
// ITransaction trans = session.BeginTransaction();
session.Save(obj);
// trans.Commit();
session.Close();
那么对于Update和Delete,如果没有启动和关闭事务,那么这两个操作不会报异常,但是数据也不会更新和删除。看来事务在NHibernate中是个Required的东西,
另外,还遇到2个问题,现在好像又没有了,就不写上来了。同样的环境,同样的代码,奇怪着呢!
[一点感觉]
对于数据的插入,更新,删除操作已经进行了很好的封装,让我忘记了ADO.NET的很多类,就像我从来都不知道有SQLConnection,DataAdapter,SQLCommand一样。
浙公网安备 33010602011771号