畅享博客 > 非鱼评影 > 程序设计 > NHibernate搭配Access的问题
2006-3-25 14:45:34

NHibernate搭配Access的问题

近日想学习一下NHibernate,以用在最新的一套大型系统上。想想不如先做一个小网站来练练手,不过之前还是得先看看NHibernate的使用方法。搜索了几篇入门文章,包括官方网站的First Step,然后就开始写了。本想使用Access数据库,结果是一直失败,一开始是连Configuration都无法生成,后来又是写入数据库错误。后来改成使用Sql server2000,结果很顺序的就通过了。再改成Access,又没有了头绪。最后经历了千辛万苦啊,终于算是通过了。总结如下:

使用Access数据库的组件在官方下载的NHibernate-contrib文件里,有个NHibernate.JetDriver.dll,这个文件也是必须的。其实,在app.config文件里加入NHibernate属性的语句是:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
? <configSections>
??? <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
? </configSections>
? <nhibernate>
??? <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
??? <add key="hibernate.dialect" value="NHibernate.JetDriver.JetDialect, NHibernate.JetDriver"/>
??? <add key="hibernate.connection.driver_class" value="NHibernate.JetDriver.JetDriver, NHibernate.JetDriver"/>
??? <add key="hibernate.connection.connection_string" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=hibtest.mdb"/>
? </nhibernate>
</configuration>

那个dialect和driver_class的值里面前面是类名称,后面是命名空间名称,中间用逗号分开,不可缺少。以前查到的一些资料里都没有这一步,所以一直失败。

最后还有一个问题,用户表里面的LastLogon是个日期时间字段,类里面字段的属性也设成日期时间,插入的时候报错,把类里面的字段改成string就可以了,可能是因为插入的时候没有加引号的问题。还有密码字段如果字段名为Password,同样插入出错,这个应该是字段名跟关键字冲突的问题,看来作者没有考虑到把字段名括起来的问题。但是我一直没有办法显示出最终要执行的sql语句,所以也一直没有办法确定错误原因。不过有了以上内容,应该足够写完整个程序了。

测试了一下性能,点击按钮到返回,要2秒多,明显有点慢,做了一个10000个新数据,然后一次写入,用了20秒才写完,有点不可接受了。回头试一下直接用OleDb写入的速度比较一下吧。


推荐到鲜果:

评论

也碰到同样的问题,看到你的文章,应该可以解决。

不过看起来速度不太快啊。

而且MS对开源支持一向很差,但MS又没有OO数据库的官方技术,真的啊

发布者 匿名用户
2008-7-3 12:24:58


现在.net 3.5都出来了,有LinQ了,就别用NHibernate了。

发布者 Jason Cui
2008-7-3 13:29:48


您正在以 匿名用户 的身份发表评论  快速登录
(不得超过 50 个汉字)
       看不清,换一个
提示消息
(输入完内容可以直接按Ctrl+Enter提交)