我正在尝试在我的项目中使用NHibernate,我收到以下错误 “正在初始化[BO.Job#34543] - 无法懒惰地初始化角色集合:BO.Job.bInterview,没有会话或会话被关闭”。有人可以帮助我。
public HttpResponseMessage GetbyId(int Id)
{
Job job = new Job();
try
{
using (ISession session = NHibernateSession.OpenSession()) // Open a session to conect to the database
{
// books = session.Query<Book>().ToList(); // Querying to get all the jobs
JobRepo = new Repo<Job>(session);
job = JobRepo.GetById(Id, "Job_selectbyId");
}
return Request.CreateResponse(HttpStatusCode.OK, job);
}
catch (Exception exp)
{
Log.Error(exp);
return Request.CreateResponse(HttpStatusCode.ExpectationFailed, job);
}
}
public T GetById(int id,string SPName)
{
T result;
//return await Task.Run(() =>
//{
IQuery query = _session.GetNamedQuery(SPName);
query.SetParameter("job_id", id);
//book = _session.Query<Book>().Where(b => b.Id == id).FirstOrDefault();
result = query.UniqueResult<T>();
return result;
//});
}
答案 0 :(得分:1)
这可能是因为您尝试访问会话关闭后标记为“懒惰”的属性。
我的猜测是你正在返回job
然后正在处理会话。然后,其他一些代码尝试访问返回的Interview
的{{1}}属性,该属性需要会话来实现延迟加载功能,但会话已被处理。
您可以更改查询以便job
是“预先获取的”,或者您可以更改映射,以便在类或属性上没有延迟初始化。