【发布时间】:2011-03-29 00:00:14
【问题描述】:
我有一个使用 NHibernate 和 ActiveRecord 的控制台应用程序。
我正在使用以下独立标准:
DetachedCriteria criteria = DetachedCriteria.For<ServiceOrder>();
criteria.Add(Restrictions.Lt("End", DateTime.Today.AddDays(3)));
criteria.Add(new Disjunction()
.Add(Restrictions.IsNull("StopReason"))
.Add(Restrictions.Eq("StopReason", ServiceStopReason.Worthiness)));
criteria.Add(new Disjunction()
.Add(Restrictions.IsNull("StopDate"))
.Add(Restrictions.EqProperty("StopDate", "End")));
我正在使用 ActiveRecordMediator 的 FindAll() 方法调用获取。
在我的模型中,我有这个属性:
[HasMany(Lazy = true)]
public virtual ISet<ServiceOrder> ServiceOrders
{
get { return serviceOrders; }
set { serviceOrders = value; }
}
我试图在以下 Linq 查询中访问:
from serviceOrder in serviceOrderDataService.GetServiceOrdersWithEndOfEntitlement()
let accountGetService = serviceOrder.AccountGetService
where accountGetService != null
let serviceOrders = accountGetService.ServiceOrders
where serviceOrders != null && serviceOrders.Count != 0
let isFutureServiceOrder = (from accountGetServiceServiceOrder in serviceOrders
where serviceOrder.Start.HasValue
&& accountGetServiceServiceOrder.End.HasValue
&& serviceOrder.Start > accountGetServiceServiceOrder.End
select accountGetServiceServiceOrder).Any()
where !isFutureServiceOrder
select serviceOrder;
但我得到以下异常:
初始化[Danel.Nursing.Model.AccountService#61786367-e8da-4929-b91b-a7497cf7db10]-失败 懒惰地初始化一个集合 角色: Danel.Nursing.Model.AccountService.ServiceOrders, 没有会话或会话被关闭
这有意义吗?我该如何解决?
【问题讨论】:
-
既然是怪物查询,能不能具体告诉我们异常是在哪里抛出的?你能提供一个失败的测试用例吗?
-
@MauricioScheffer:一旦我访问 serviceOrders.Count,就会引发异常。关于测试用例,我不确定。超过 50 行。
-
您如何管理会话范围?
-
@MauricioScheffer:你什么意思?
-
@the_drow:你在哪里/怎么做
new SessionScope()?还是您没有明确管理会话范围?
标签: nhibernate session activerecord lazy-loading castle-activerecord