zoukankan      html  css  js  c++  java
  • 遭遇:TargetException: 对象与目标类型不匹配。

    最近在使用NHibernate时,发现有的列表无法绑定,如提示如下的错误:

    [TargetException: 对象与目标类型不匹配。]
       System.Reflection.RuntimeMethodInfo.CheckConsistency(Object target) +7515851
       System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) +105
       System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +29
       System.ComponentModel.ReflectPropertyDescriptor.GetValue(Object component) +100

    [TargetInvocationException: 对象“Grain.Components.DicDept”上的属性访问器“Name”发生以下异常: “对象与目标类型不匹配。”]
       System.ComponentModel.ReflectPropertyDescriptor.GetValue(Object component) +390
       System.Web.UI.WebControls.BoundField.GetValue(Control controlContainer) +192
       System.Web.UI.WebControls.BoundField.OnDataBindField(Object sender, EventArgs e) +64

     
    前台是如此绑定:

                        <asp:BoundField  DataField="Name" HeaderText="部门名称" />

    分析了原因,原来是Eval("Name")执行时,应该会把列表的第一个类型反射,以后都用这个类型,而第一个和第二个类型分别是:

    类型   
    CProxyTypeGrain_ComponentsDicDeptComponents_NHibernate_ProxyINHibernateProxy1 
    Grain.Components.DicDept

     
    在我的项目中,第二个是我的类,第一个明显是Hibernate的代理类,是DicDept的子类.所以报错是肯定的了.反之,如果第一个节点是DicDept,然后才是代理类,则不会出现错误.

    为什么会发生如此的事情呢?我想可能是因为当前登陆用户的部门属于列表中的第一项,所以每次登陆,这个对象都会加载进来,从而在列表时,这个对象会从缓存中直接加载.

    看来,我们要在进行查询时,对缓存中的对象进行一下清理,这样就排除了从缓冲中直接取数据,导致类型不一致的问题.

                    Database.Session.Clear(); //先清除缓存
                    list.AddRange(DicDept.TopDicDeptList());

     好了,现在问题解决了,不过我得考虑一下,是不是每次进行查询前都要进行清理呢?又在哪里进行清理呢?

  • 相关阅读:
    ios下的appium 通过ipa包名启动app demo演示
    如何在Mac上获取App Store上的ipa用于ios下的appium 自动化测试
    Unittest命令行执行测试、执行测试发现操作实例
    nodejs之querystring模块
    nodejs之url模块
    微信小程序学习Course 5 view组件、input组件、button组件
    微信小程序学习Course 3-1 JS字符串对象学习
    微信小程序学习Course 2 关于WXSS一些样式
    微信小程序学习Course 4 事件
    微信小程序学习Course 1 微信小程序基本内容
  • 原文地址:https://www.cnblogs.com/evlon/p/1346398.html
Copyright © 2011-2022 走看看