NHibernate.LazyInitializationException .Net Web API

时间:2017-07-31 01:08:34

标签: nhibernate

我正在尝试在我的项目中使用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;
            //});
        }

1 个答案:

答案 0 :(得分:1)

这可能是因为您尝试访问会话关闭后标记为“懒惰”的属性。

我的猜测是你正在返回job然后正在处理会话。然后,其他一些代码尝试访问返回的Interview的{​​{1}}属性,该属性需要会话来实现延迟加载功能,但会话已被处理。

您可以更改查询以便job是“预先获取的”,或者您可以更改映射,以便在类或属性上没有延迟初始化。