类型不匹配:TargetException: 对象和目标类型不匹配来源: 发布时间:星期六, 2009年3月28日 浏览:0次 评论:0
最近在使用NHibernate时发现有列表无法绑定如提示如下: [TargetException: 对象和目标类型不匹配] .Reflection.RuntimeMethodInfo.CheckConsistency(Object target) +7515851 .Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean skipVisibilityChecks) +105 .Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture) +29 .ComponentModel.ReflectPropertyDescriptor.GetValue(Object component) +100 [TargetInvocationException: 对象“Grain.Components.DicDept”上属性访问器“Name”发生以下异常: “对象和目标类型不匹配”] .ComponentModel.ReflectPropertyDescriptor.GetValue(Object component) +390 .Web.UI.WebControls.BoundField.GetValue(Control controlContainer) +192 .Web.UI.WebControls.BoundField.OnDataBindField(Object sender, EventArgs e) +64 前台是如此绑定: <asp:BoundField DataField="Name" HeaderText="部门名称" /> 分析了原因原来是Eval("Name")执行时应该会把列表第个类型反射以后都用这个类型而第个和第 2个类型分别是: 类型 CProxyTypeGrain_ComponentsDicDeptComponents_NHibernate_ProxyINHibernateProxy1 Grain.Components.DicDept 在我项目中第 2个是我类第个明显是Hibernate代理类是DicDept子类.所以报错是肯定了.反的如果第个节点是DicDept然后才是代理类则不会出现. 为什么会发生如此事情呢?我想可能是当前登陆用户部门属于列表中第项所以每次登陆这个对象都会加载进来从而在列表时这个对象会从缓存Cache中直接加载. 看来我们要在进行查询时对缓存Cache中对象进行下清理这样就排除了从缓冲中直接取数据导致类型不致问题. Database.Session.Clear; //先清除缓存Cache list.AddRange(DicDept.TopDicDeptList); 好了现在问题解决了不过我得考虑下是不是每次进行查询前都要进行清理呢?又在哪里进行清理呢? 0
相关文章读者评论发表评论 |
|