“无法实例化” Nhibernate.QueryException通过联合查询提高
-
10-10-2019 - |
题
执行以下NHIBERNATE.LINQ语句提出了一个 "could not instantiate: Reservation001.Services.ReservationDto"
nhibernate.queryException包含内部无效的异常(“对象必须实现Iconvertible。”):
var inOneStep = (from r in session.Linq<Models.ReservationHeader>()
select new ReservationDto(r.Current));
return inOneStep;
但是,将上面的查询分为两个查询后,tolist()调用了第一个的结果,该代码执行正常。
var step1 = (from r in session.Linq<Models.ReservationHeader>()
select r).ToList();
var step2 = from z in step1
select new ReservationDto(z.Current);
return step2;
为什么单个语句版本会引起异常?
谢谢,
本
解决方案
第一个不起作用的原因是因为整个查询都被发送到nhibernate,并且(如例外告诉您)Nhibernate期望与ReservationDto具有可爱的东西。
两个步骤过程避免了此错误,因为通过调用“ tolist()”,您会立即在NHIBERNATE中执行查询 没有 涉及ReservationDto,并返回对象集合。然后,您的第二步是简单地在对象集合上操作,并且由于不再涉及NHIBERNATE,因此您避免了错误。
通常,LINQ使用延迟执行,其中一些功能(例如Tolist())迫使立即评估。看 http://devlicio.us/blogs/derik_whittaker/archive/2008/04/07/linq-and-delayed-execution.aspx
不隶属于 StackOverflow