现在要开发一个项目,可支持多数据库,以前是用petshop里的那种工厂模式进行反射来做的,通过配置文件和反射来动态调用数据访问层,譬如oracle就调用OracleDAL,Sql server就是MssqlDAL。
现在数据持久层打算采用nh框架,该怎么处理呢?
我可以通过配置文件动态的载入不同的hibernate.cfg.xml,但是持久化类和映射文件呢?!
每个数据库写一个程序集么?
那样的话我在页面添加数据的时候 要调用持久类的话每次还要根据配置文件来调用不同的数据持久层的程序集么?

解决方案 »

  1.   

    每个数据库写一个程序集?  不太理解你这句话一般情况是一张表 对应一个实体类   映射文件描述实体跟表的关系添加数据的时候,只要Save(entity)就行了,NH会根据hibernate.cfg.xml中的session-factory中的mapping配置去寻找映射的
      

  2.   


    就是每个数据库写一个数据持久层,毕竟不同的数据库的Demo.hbm.xml这种映射文件有区别啊,oracle的里的一些主键可以用序列来产生,sql server里是identity。
      

  3.   

    不同的数据库的Demo.hbm.xml这种映射文件有区别?据我所知映射文件是一样的,当然我没用过oracle主键是对NH配置,NH会根据配置去调用目标数据库的主键机制例如:assigned    guid.comb其他主键配置你可以在网上找
      

  4.   

    改改配置就行了connection.driver_class
    connection.connection_string
    dialect其他基本不用动,但是如果你用了特定于数据库的功能,代码就要改了
      

  5.   

    主键的问题,可以试试 native
      

  6.   

    我以为NH是去调用数据库的主键机制,看样子是我错了。NHibernate为我们提供了很多方式来为新实体创建或定义主键值。我个人推荐的两个ID生成器是:HiLo生成器和GuidComb生成器。HiLo生成器生成整数作为主键值,而GuidComb算法生成的GUID,为数据库中的索引进行了优化。使用.NET框架的标准算法生成的GUID不太合适,所以NHibernate以GuidComb生成器的形式提供了自己的实现。