NHibernate, 存档
     

迁移到 nhibernate 2。0

在基于 nhibernate 的项目中工作时, nhibernate 文档通常非常方便。我将文档的 pdf 副本保存到 nhibernate 1.0 和1.2 在我的硬盘驱动器上, 因为我永远不知道何时需要引用它们。不幸的是, nhibernate 队似乎在2.0 版方面丢球了。nhibernate 网站不仅缺乏关于2.0 版的任何文档, 该网站的行为就好像2.0 版甚至还没有发布。与以前对框架的更新不同, 2.0 版表示对代码库的完全重构, 许多命名空间和对象已删除或重命名。尽管缺少官方文档, 但仍有多种资源可帮助您将现有的 nhibernate 1.2 应用程序迁移到 nhibernate 2.0。

重大更改的列表

nhibernate 论坛有一个主题, 讨论1.2 版和2.0 版的 alpha 预发行之间的重大更改。对于完整的列表, 请查看论坛, 但这里是您最有可能面临的。

 

问题: nhibernate. 表达式命名空间不再存在。

概述: 以前保存在此命名空间中的最值得注意的项是创建 icriteria 时使用的表达式对象。幸运的是, 这个物体仍然存在于 nhibernate 中。

解决方案: 替换所有 "正在使用" 的语句以反映命名空间的更改。

使用 nhbernna。这条线路不再需要在 nh 2。0
使用 nhbernate. 标准;   用这条线代替它。

 

问题: 不再使用 n触及配置部分 (很可能在 web. config 或 app. config 中)。

概述: nhibernate 2.0 不再查看名为 nhibernate 的配置部分, 而是查找名为 "休眠配置" 的配置部分 (请注意休眠中缺少 "n" 个)。此外, 配置部分不是简单地重命名的, 它承载着完全不同的架构。

解决方案: 简而言之, 整个配置部分将需要稍微重新设计。

首先, 您的配置部分声明必须更改其名称和类型:

<configuration></configuration>
   <configSections></configSections>
      <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" requirepermission="false"></section>
   

请注意名称是如何更改的 (如上所述), 该类型现在是在 nhibernate 库中定义的配置节处理程序。这也意味着 nhibernate. dll 必须是您的 ui 的引用, 如果以前不是必需的, 除非您在 ui 中执行数据访问..。反正你也不应该这么做

新配置节后, 您必须更新实际配置。例如, 我的一个应用程序中的 nhibernate 1.2 配置:

  <nhibernate></nhibernate>
    <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"></add>
    <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2005Dialect"></add>
    <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"></add>
    <add key="hibernate.connection.connection_string" value="SQL CONNECTION STRING HERE"></add>
    <add key="hibernate.bytecode.provider" value="null"></add>
    <add key="hibernate.show-sql" value="false"></add>
  

我必须将上述内容改写为:

  <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"></hibernate-configuration>
    <bytecode-provider type="null"></bytecode-provider><!-- Important under Medium Trust -->
    <reflection-optimizer use="false"></reflection-optimizer>
    <session-factory></session-factory>
      <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
      <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
      <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
      <property name="connection.connection_string">这里的 SQL 连接</property>
      <property name="show_sql">假</property>
    
  

差异不是很小, 配置的值是唯一不会改变的。请注意, 密钥名称现在是如何被称为名称的, 并且已删除了前导休眠前缀。此外, 请注意配置部分现在如何具有将大部分配置详细信息推送到会话-出厂部分的层次结构, 但字节码提供程序和反射优化设置的明显例外。

更多的资源

除了上述资源外, 我还使用了与 nhibernate 2 一起提供的 xsd 架构定义来计算如何编写新的配置部分。. net 反射器对于验证不同类的新位置也很有用。最后, hibernate 文档将在这几天得到更多的使用, 因为最新版本的 nhibernate 据称在设计上比它的前身更接近它的 java 表兄弟。

最后的想法

除了缺少官方文档之外, 我必须说, 我很高兴能够轻松地将 nhibernate 1.2 应用程序转换为2.0 版。你们中那些经历了将1.0 应用程序转换为1.2 的乐趣的人记得所需的繁琐映射修改的数量。谢天谢地, 我可以说, 这种转换并不要求 (至少在我的情况下) 更改您的任何映射文件。

About Jason

Jason 是一位经验丰富的企业家和软件开发商, 在石油和能源行业有丰富的工作经验。精通领导力、移动开发、数据同步和 saas 架构。强大的工程专业, 阿肯色州立大学计算机科学学士学位。
View all posts by Jason →

发表评论

电子邮件地址不会被公开。 必填项已用*标注