NHibernate 配置文件的处理和使用多数据库的多层架构思路(第三部分,附源代码)

三、业务逻辑层 四、显示层 
     
        这两个就不多说了。

        下面给出 hibernate.cfg.xml 配置文件的内容:

<? xml version="1.0" encoding="utf-8"  ?>
< hibernate-configuration   xmlns ="urn:nhibernate-configuration-2.2"   >
    
< session-factory  name ="NHibernate.Test" >
        
<!--  properties  -->
        
< property  name ="connection.provider" > NHibernate.Connection.DriverConnectionProvider </ property >
        
< property  name ="connection.driver_class" > NHibernate.Driver.SqlClientDriver </ property >
        
< property  name ="show_sql" > false </ property >
        
< property  name ="dialect" > NHibernate.Dialect.MsSql2005Dialect </ property >
        
< property  name ="use_outer_join" > true </ property >
        
<!--  mapping files  -->
        
<!--  <mapping assembly="Novelty.Model" />  -->
    
</ session-factory >
</ hibernate-configuration >

        最后,附带的提一个在 NHibernate-1.2.0.GA 版本中遇见的问题。

        如果使用 NHibernate-1.2.0.GA,持久类的属性需要加 virtual 的问题。

        如果不加,就会报这个错误: method get_(属性或是方法名称) should be virtual。

        由于NHibernate 1.2.0 默认对类用了延迟加载,所以需要要给属性或是方法名称加上 virtual。
另外,我搜索到了一篇 blog (见参考资料7),给出了一段英文解释!试着翻译一下,或者大家直接看原文!

        1. 你可能要遵循异常建议,并给你所有的属性加上virtual,这样确保你的类是非密封的(non-sealed)。很明显,如果你认为你想要利用延迟加载代理的特点,你应该这样做。可是,假如你有一个可继承的基类,或者可能仅仅是它困绕着你:一个“透明”的持久层框架规定了你如何设计你的有价值的类的某些方面。那么第二项和第三项选择就来了。它们两个涉及到改变支持旧的行为。

        2.针对某一个特定的类改变延迟加载代理设置,你可能要在<class>映射元素中mapping增加一个lazy='false'的属性。这可能看起来象下面的设置:
<class
    name="NorthwindClasses.Category, NorthwindClasses"
    table="Categories"
    lazy="false"
>

        3. 为了在一个特定的映射文件中为所有的类改变延迟加载代理设置,你可能要增加<hibernate-mapping>元素中增加一个lazy='false'的属性,如下:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" default-lazy="false"> 
 
        不幸的是,如果你的每一个类对应一个<hibernate-mapping>文件,这类实践是我个人遵循和推荐的,那么选择三可能并不能真正地帮助你太多。 虽然太糟糕了,但是看起来似乎没有任何办法在 <nhibernate> 的全局配置中设置这个默认值。但是如果你恰好遇见你的所有类都在一个 .hbm.xml 文件里,"default-lazy"属性可以帮助你解决困难。

        5月17号补充:  Cheney 在评论中说在配置文件中加上下面的设置可解决这个问题.也就是说我不想利用延迟加载代理的特点.:)
       <property name="use_proxy_validator">false</property>
       谢谢指点!
       我在论坛上又查到了一个 Hibernate Team 的 sergey 说了下面一段话: 不要禁用验证.要么将成员声明为 virtual,要么在将出错的类的延迟加载设置为 false. 只有不要报告任何错误才禁用验证.
原话Don't disable the validation. Either declare the members virtual, or set lazy="false" for the failing class. Disable the validation only after it doesn't report any errors.
:

另外两部分:
NHibernate 配置文件的处理和使用多数据库的多层架构思路(第一部分)
http://blog.csdn.net/scucj/archive/2007/05/16/1610858.aspx
NHibernate
配置文件的处理和使用多数据库的多层架构思路(第二部分)
http://blog.csdn.net/scucj/archive/2007/05/16/1610860.aspx


        全文结束!

2007 年 6月6号 补充:
我还是提供一个简单的解决方案的源代码下载吧!虽然三部分加两个补充部分说了很多少,但是有解决方案的源代码更清晰一些!

下载地址


参考资料如下:
(1) 基于NHibernate的三层结构应用程序开发初步:
http://www.cnblogs.com/terrylee/archive/2006/02/16/331978.html
(2) NHibernate的灵活配置:
http://www.cnblogs.com/renrenqq/archive/2006/08/02/466056.html
(3) 第1章 单件模式(Single Pattern):
http://terrylee.cnblogs.com/archive/2005/12/09/293509.html
(4) 在Nhibernate中执行sql语句 :
http://www.cnblogs.com/oldhorse/archive/2006/07/08/445958.html
(5) IList<T> 转换成 DataSet :
http://www.cnblogs.com/yyw84/archive/2006/08/15/463480.html
(6) 面向对象的NHibernate数据查询语言-HQL
http://www.cnblogs.com/me-sa/archive/2007/04/09/705323.html
 (7) 关于NHibernate1.2延迟加载及InvalidProxyTypeException异常
http://blog.csdn.net/lulustray/archive/2007/04/20/1571506.aspx
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好!要使用NHibernate连接Oracle数据库,您需要进行以下配置步骤: 1. 首先,确保您已经安装了Oracle数据库并且可以访问它。如果尚未安装,请先安装并设置好。 2. 下载并引入NHibernate库和Oracle驱动程序。您可以从NHibernate官方网站(https://nhibernate.info)下载NHibernate库。至于Oracle驱动程序,您可以从Oracle官方网站(https://www.oracle.com/database/technologies/dotnet-odpnet-downloads.html)下载。 3. 在您的应用程序中创建一个NHibernate配置文件(通常是一个XML文件),配置连接字符串和其他必要的属性。以下是一个示例配置文件的基本结构: ```xml <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory> <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> <property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property> <property name="connection.connection_string">your_connection_string_here</property> <!-- 其他配置属性 --> </session-factory> </hibernate-configuration> ``` 请将 "your_connection_string_here" 替换为您的Oracle数据库连接字符串。 4. 在您的应用程序中创建一个NHibernate SessionFactory 对象。您可以使用上述配置文件来创建它。以下是一个示例代码片段: ```csharp Configuration cfg = new Configuration(); cfg.Configure("path_to_your_config_file"); SessionFactory sessionFactory = cfg.BuildSessionFactory(); ``` 请将 "path_to_your_config_file" 替换为您的配置文件的路径。 5. 现在,您可以使用NHibernate的Session对象来执行数据库操作了。例如,您可以使用LINQ或HQL查询来检索、插入、更新或删除数据。 这只是一个基本的示例,NHibernate还有更多高级功能和配置选项。您可以参考NHibernate文档和示例代码来了解更多信息。 希望这可以帮助到您!如果您还有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值