6

将应用程序从NHibernate 1.2 迁移到 2.0有哪些注意事项?什么是重大更改与推荐更改?

有映射问题吗?

4

2 回答 2

8

NHibernate 2.0 中的重大变化

如果您有良好的测试覆盖率,那就是忙碌的工作。

编辑:我们今天早上升级了。没什么大不了的。删除后,您必须 Flush() 会话。Expression 命名空间已重命名为 Criterion。所有这些都包含在上面的链接中。映射不需要更改。这是相当透明的。哦,到处都有交易,但你可能已经这样做了。

顺便说一句,这里有一个有趣的变化:http ://codebetter.com/blogs/patricksmacchia/archive/2008/08/26/nhibernate-2-0-changes-overview.aspx

于 2008-08-26T03:04:08.333 回答
2

我在这里找到了答案:

http://blog.domaindotnet.com/2008/08/24/nhibernate-20-gold-released-must-wait-for-linq-to-nhibernate/

黄金版 2.0.0.GA

从 NH1.2.1GA 到 NH2.0.0 的重大变化

  • 基础设施

  • 编译时间

    • NHibernate.Expression 命名空间重命名为 NHibernate.Criterion
    • IInterceptor 有额外的方法。(IsUnsaved 更名为 IsTransient)
    • 命名策略
    • 类型
    • IEntityPersister
    • 版本类型
    • IBatcher
    • IUserCollectionType
    • IEnhancedUserType
    • IPropertyAccessor
    • ValueTypeType 重命名为 PrimitiveType
  • 外部框架可能发生的重大变化

  • 各种类在命名空间之间移动
  • 已重命名各种类(以匹配 Hibernate 3.2 名称)
  • ISession 接口有额外的方法
  • ICacheProvider
  • 标准
  • CriteriaQueryTranslator

  • 初始化时间

    • App.config 中的 <nhibernate> 部分不再受支持,将被忽略。配置文件和 App.config 的配置模式现在相同,并且 App.config 部分名称为:<hibernate-configuration>
    • <hibernate-configuration> 具有不同的架构,并且所有属性名称都经过检查
    • 配置属性不再以“hibernate”为前缀。如果之前指定“hibernate.dialect”,现在只指定“dialect”</li>
    • 所有命名查询将在初始化时进行验证,如果任何一个无效将抛出异常(如果需要可以禁用)
    • 对代理类进行更严格的检查(所有公共方法必须是虚拟的)

  • 运行

    • SaveOrUpdateCopy() 返回实体的新实例而不更改原始实例
    • AutoFlush 不会发生在事务之外 - 数据库事务永远不是可选的,与数据库的所有通信都必须发生在事务内部,无论您读取或写入数据。
    • NHibernate 将为 SQL Server 上的 count(*) 查询返回 long
    • <formula> 必须在需要时包含括号
    • 这些 HQL 函数名称可能会导致您的 HQL 保留名称冲突:
      • 子串
      • 定位
      • 修剪
      • 长度
      • 位长
      • 合并
      • 无效
      • 腹肌
      • 模组
      • 平方
      • 降低
      • 投掷
      • 提炼
      • 连接
      • 当前时间戳
      • 系统日期
      • 第二
      • 分钟
      • 小时
      • 字符串
    • <any> 当 meta-type=”class” 持久类型是一个包含 Class.FullName 的字符串
      • 为了在查询中设置参数,您必须使用 SetParameter(”paraName”, typeof(YourClass).FullName, NHibernateUtil.ClassMetaType)

  • 映射

  • <any> :默认元类型是“string”(是“class”)
  • 于 2008-08-26T17:36:49.687 回答