gpt4 book ai didi

c# - session 关闭后无法访问引用的对象

转载 作者:太空宇宙 更新时间:2023-11-03 16:27:00 25 4
gpt4 key购买 nike

我有一个类 DepartmentEntity,包括一个名为 Company(CompanyEntity) 的属性,如下所示:

public class DepartmentEntity
{
public virtual int ID { get; set; }
public virtual string Name { get; set; }
public virtual DepartmentEntity Parent { get; set; }
public virtual CompanyEntity Company { get; set; }
}

public class CompanyEntity
{
public virtual int ID { get; set; }
public virtual string Name { get; set; }
}

DepartmentEntity.hbm.xml 如下:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="HS.DepartmentEntity, HS" table="DepartmentInfo" lazy="true">
<id name="ID">
<generator class="identity" />
</id>
<property name="Name" not-null="true" />
<many-to-one name="Parent" column="ParentID" class="HS.DepartmentEntity, HS" cascade="none" unique="true" not-found="ignore" lazy="no-proxy" />
<many-to-one name="Company" column="CompanyID" class="HS.CompanyEntity, HS" cascade="none" unique="true" not-found="ignore" lazy="no-proxy" />
</class>
</hibernate-mapping>

CompanyEntity.hbm.xml 如下:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="HS.CompanyEntity, HS" table="CompanyInfo" lazy="true">
<id name="ID">
<generator class="identity" />
</id>
<property name="Name" not-null="true" />
</class>
</hibernate-mapping>

我尝试了下面的代码:

IList<DepartmentEntity> list; 
using(ISession session = GetSession())
{
string hql = "FROM DepartmentEntity as dpe join fetch dpe.Company";
list = session.CreateQuery(hql).List<DepartmentEntity>();
}

session关闭后,属性Company无法访问,但是如果list方法只找到一条记录,属性Company可以访问,我不知道为什么。

最佳答案

NHibernate 使用 session 对象来延迟加载导航属性。当您第一次访问导航属性时,NHibernate 会访问数据存储并使用 session 获取对象的值。当 session 关闭时,尝试访问该属性将引发类型为 NHibernate.LazyInitializationException 的异常。

我建议您在需要访问 Company 属性时尝试保持 session 打开,或者您可以关闭应用程序的延迟加载(这可能会降低性能)。

关于c# - session 关闭后无法访问引用的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12250458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com