专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »DotNet » 类型不匹配:TargetException: 对象和目标类型不匹配 »正文

类型不匹配: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

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: