Nhibernate1.2的问题CProxyxxxInfoCannotbeConverted to System.String

 
我的Publisher系统才刚刚开始,又被一些问题给卡住了,不过在本人的机智聪明下都被一一化解(汗~~)。
Now,先来看看我又遇到了什么问题。
还是关于Nhibernate的,我用code Smith生成的Mapping文件和persistent Class似乎都有了问题,先来看看出问题的代码:
ICriteria criteria = _session.CreateCriteria(typeof(ContentInfo));
criteria.Add(Expression.Eq("ModuleId", ModuleId));
IList <ContentInfo> contentList = criteria.List<ContentInfo>();
我们先来看看代码有什么问题,ModuleId是一个String类型的变量,但是我在run的时候总是收到一个 Type mismatch in的Exception怎么回事呢??
Tracking程序进入到NHibernate的内部,发现异常抛出在以下的代码中:
if (_value != null && !(_value is System.Type) && !propertyType.ReturnedClass.IsInstanceOfType(_value))
                        {
                                throw new QueryException(string.Format(
                                                                "Type mismatch in {0}: {1} expected type {2}, actual type {3}",
                                                                GetType(), _propertyName, propertyType.ReturnedClass, _value.GetType()));
                        }
关键是 propertyType.ReturnedClass.IsInstanceOfType(_value)这个 statement,此时我的_value是一个String类型的ModuleId而这个ModuleId又是一个many to one的field,它在Mapping file中的表示是:
< many-to-one name = "ModuleId"class="MyPublisher.Entities.ModuleInfo, Entities">
 < column name = "ModuleId"length="50"sql-type="varchar"not-null="false"/>
</ many-to-one >
看到了吧,并没有String类型的说明的,但是我在contentInfo这个persistent Class中又将ModuleId定义成了String。所以此时会抛出一个异常。
^_^问题的原因找到了,那就可以着手改了,很简单,将传入Criteria.add(Expression.Eq(“ModuleId”,ModuleId))中的ModuleId改成传入ModuleInfo(object of ModuleInfo class)。
然后再运行。。。。。。。
靠,从来就没有一帆风顺的事情,老子的程序又有问题了,这下又报了一个更加不知所谓的Exception: Unable to cast object of type CProxyTypeModuleInfo to System.String(可能有些出入,记错了,^_^ ,大概是这个样子的)。
同上,继续tracking,然后发现出错语句,就不细讲了,问题出在应该讲persistent class中的ModuleId field改成ModuleInfo类型。当然相关的部分也要做相应的修改。
 
基本上我总结,只要Mapping的时候出现many to one的field,在使用criteria的时候一定就要传入对象,而不能只是只传入具体的值。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值