NHibernate常见问题及解决方法

NHibernate常见问题及解决方法

曾经学过NHibernate的,但是自从工作到现在快一年了却从未用到过,近来要巩固一下却发现忘记了许多,一个“in expected: <end-of-text> (possibly an invalid or unmapped class name was used in the query).”错误查了好半天终于查到了。这篇文章是我转载的NHibernate的常见错误。。。

  • hbm.xmlNHibernate文件中版本号可能引起的问题.<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">         
      此处的2.2代表了NHibernate的版本号,必须与你安装的NHibernate的产品版本号相符.否则的话,举个例子,若为urn:nhibernate-mapping-2.0,则会出现如下错误: Could not find schema information for the element ‘urn:nhibernate-mapping-2.0:hibernate-mapping‘. 或是:"NHibernate.Cfg.Environment的类型初始值设定项引发异常".
  • 在对照类中如果属性没有加virtual关键字,可能报

    NHibernate.InvalidProxyTypeException: The following types may not be used as proxies:
    Model.FriendLink: method set_Description should be virtual
    Model.Type: method get_TypeName should be virtual.....
    这是一种解决方案是给属性加上virtual关键字,另一种解决方法是在映射文件中加入default-lazy="false".

  • in expected: <end-of-text> (possibly an invalid or unmapped class name was used in the query).

    映射文件没有将属性设为"嵌入的资源"或者调方法时表名大小写问题

  • "Could not find the dialect in the configuration"异常
  • 异常描述:

    NHibernate.MappingException: Could not compile the mapping document: Model.FriendLink.hbm.xml ---> System.InvalidOperationException: Could not find the dialect in the configuration
      在 NHibernate.Dialect.Dialect.GetDialect(IDictionary`2 props)
      在 NHibernate.Cfg.Configuration.AddValidatedDocument(NamedXmlDocument doc)
    解决方法: 
    配置文件中xmlns="urn:nhibernate-configuration-2.2"千万不能忘记,确保没有忘掉xmlns="urn:nhibernate-configuration-2.2"就可以解决这个bug.

    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">  <session-factory>    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>    <property name="use_outer_join">true</property>    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>    <property name="show_sql">true</property>    <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>    <property name="connection.connection_string">Server=.\sqlexpress;initial catalog=SBlog;User Id=sa;Password=1;</property>    <mapping assembly="XMGL.Model"/>  </session-factory></hibernate-configuration>
  • "未能未能加载文件或程序集Castle.DynamicProxy2"的异常

    异常描述:

    System.TypeInitializationException: “NHibernate.Proxy.Poco.Castle.CastleProxyFactory”的类型初始值设定项引发异常。 ---> System.IO.FileNotFoundException: 未能加载文件或程序集“Castle.DynamicProxy2, Version=2.0.3.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc”或它的某一个依赖项。系统找不到指定的文件。
    文件名:“Castle.DynamicProxy2, Version=2.0.3.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc”
       在 NHibernate.Proxy.Poco.Castle.CastleProxyFactory..cctor()

    解决方法:

    该异常的方法比较简单,在程序集中添加引用就可以了.

  • TimeStamp的使用.

    感觉NHibernate对timestamp支持不好,我在sql server 2005定义了一个timestamp类型的列,在映射文件里映射为datetime类型,然后就报:
       NHibernate.ADOException: Could not cast the value in field upsize2_0_ of type Byte[] to the Type TimestampType.  Please check to make sure that the mapping is correct and that your DataProvider supports this Data Type. ---> System.InvalidCastException: 无法将类型为“System.Byte[]”的对象强制转换为类型“System.IConvertible”。
       在 System.Convert.ToDateTime(Object value)
       在 NHibernate.Type.TimestampType.Get(IDataReader rs, Int32 index)
       在 NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String name)
    搞了半天也没有配好,只能将数据库列改为datetime类型,然后以下面的格式配置映射文件:

    <id name="ContentId" type="String" unsaved-value="null">
                <column name="ContentId" length="36" sql-type="nvarchar" not-null="true" unique="true" index="aaaaaContent_PK"/>
          <generator class="assigned"/>
            </id>
        <timestamp name="Upsizets" column="upsize_ts" />
  • Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)
    引起这个错误的一个原因是数据库锁定,NHibernate默认采用的是乐观锁定.关于NHibernate中乐观锁定以及如何解决错误的信息可以看there .
  • 
    
  • IDENTITY_INSERT 为OFF
    在查询分析器中SET IDENTITY_INSERT 表名 ON
  • 在容器中未找到数据项。容器必须实现 IDataItemContainer 或者具有名为 DataItem 的属性。
    <id name="d_name" column="d_name" type="System.String">
          <generator class="assigned"/>
    </id>主键字段必须为当前表存在的字段

    
    

    The element ‘class‘ in namespace ‘urn:nhibernate-mapping-2.2‘ has invalid child element ‘property‘ in namespace ‘urn:nhibernate-mapping-2.2‘. List of possible elements expected: ‘urn:nhibernate-mapping-2.2:meta urn:nhibernate-mapping-2.2:jcs-cache urn:nhibernate-mapping-2.2:cache urn:nhibernate-mapping-2.2:id urn:nhibernate-mapping-2.2:composite-id‘.

时间: 2024-12-30 17:44:30

NHibernate常见问题及解决方法的相关文章

Android项目:proguard混淆之常见问题及解决方法汇总

1.使用proguardgui混淆器对jar包进行混淆,出现EXCEPTION FROM SIMULATION错误: [2014-07-08 14:29:55 - Test024_HouseBox_v02_jar] Dx  EXCEPTION FROM SIMULATION: [2014-07-08 14:29:55 - Test024_HouseBox_v02_jar] Dx local variable type mismatch: attempt to set or access a va

AppFuse 3常见问题与解决方法

很长一段时间没做SSH项目了,最近抽空看了一下升级到3.x的appfuse,对新版本使用过程中出现的一些问题进行了排查,汇总如下,以备后用.本文原文出处: http://blog.csdn.net/bluishglc/article/details/38640715 严禁任何形式的转载,否则将委托CSDN官方维护权益! 起步 使用appfuse的第一步自然是通过archetype:generate生成项目.这本不是一问题,官方的QuickStart:http://appfuse.org/disp

WebServices生成发布过程及常见问题的解决方法

春夏秋冬走健康之路看四季养生网 健康饮食 养生问题 母婴保健 养生小常识 3.下一步,我们需要将Myservice文件夹拷贝到C:\Inetpub\wwwroot目录下(重要).如下图所示  然后依次右击“我的电脑”->“管理”->“服务和应用程序”->“Internet信息服务(IIS)管理器”打开IIS管理器,或者在控制面板中,通过“管理工具”打开“Internet信息服务(IIS)管理器”,如下图所示 展开“网站”节点,右键点击“默认网站”节点,依次选择“新建”->“虚拟目录

银河麒麟操作系统常见问题及解决方法(四)

银河麒麟操作系统常见问题及解决方法(四)                                     ——激活问题   银河麒麟操作系统是国防科大唯一授权给天津麒麟信息技术有限公司的国产Linux操作系统,支持x86架构,唯一支持飞腾CPU. 银河麒麟操作系统作为国内等级最高的操作系统,源自国家“十五”科技重大专项研究成果.经过十余年的发展,形成了服务器.桌面.实时.云.存储五大系列操作系统产品,以及高性能计算.云计算和云桌面等产品. 由于银河麒麟操作系统的广泛应用,用户体验过程中难

银河麒麟操作系统常见问题及解决方法(一)

银河麒麟操作系统常见问题及解决方法(一) 银河麒麟操作系统是国防科大唯一授权给天津麒麟信息技术有限公司的国产Linux操作系统,支持x86架构,唯一支持飞腾CPU. 银河麒麟操作系统作为国内等级最高的操作系统,源自国家"十五"科技重大专项研究成果.经过十余年的发展,形成了服务器.桌面.实时.云.存储五大系列操作系统产品,以及高性能计算.云计算和云桌面等产品. 由于银河麒麟操作系统的广泛应用,用户体验过程中难免会遇到一些问题,接下来就银河麒麟操作系统的安装问题及版本问题送上解决方法(以下

Tcp编程常见问题及解决方法总结

问题1.粘包问题 解决方法一:TCP提供了强制数据立即传送的操作指令push,TCP软件收到该操作指令后,就立即将本段数据发送出去,而不必等待发送缓冲区满: 解决方法二:发送固定长度的消息 解决方法三:把消息的尺寸与消息一块发送 解决方法四:双方约定每次传送的大小 解决方法五:双方约定使用特殊标记来区分消息间隔 解决方法六:标准协议按协议规则处理,如Sip协议 问题2.字符串编码问题 将中文字符串用utf8编码格式转换为字节数组发送时,一个中文字符可能会占用2-4个字节(假设为3个字节),这3个

appframework学习--appframework开发常见问题及解决方法(不定期更新)

1.页面跳转错误:Uncaught TypeError: Cannot read property 'afCSS3AnimateId' of undefined 原因:data-defer=""  跳转路径不正确 解决:路径正确即可 2.程序正在启动的圈圈一直 原因:转id冲突,出现重名id 解决:id冲突,出现重名id appframework学习--appframework开发常见问题及解决方法(不定期更新)

webpack构建工具常见问题及解决方法

webpack构建工具常见问题及解决方法 在运用webpack开发项目的时候经常会遇到各种各样的问题,我对实际开发项目中实际遇到的一些问题 进行总结,希望能帮助到大家. ?? 1. 构建需要的包未添加依赖报错 Module not found:"xxx(例:react)" in "项目文件" ??这种情况是由于"xxx(例:react)"未添加依赖,解决办法如下: npm install xxx(react) --save 或 yarn add

mysql5.6配置同步复制的新方法以及常见问题的解决方法

mysql5.6新增一种不用设置log_bin文件和log位置的方法,之前我们都需要查看master机器信息(show master status),然后在slave设置 master_host='10.163.213.228',master_user='repl',master_password='sangfordb',master_log_file='mysql-bin.000015',master_log_pos=193952; 使用mysql5.6后可以不用这种方法配置了,只要设置my.