如何在实体中加载一个对象列表

本文关键字:加载 一个对象 列表 实体 | 更新日期: 2023-09-27 18:12:39

我有一个由NHibernate实现并使用延迟加载的项目。在这个项目中我有两个班:个人和家庭。这两者之间的关系是聚合,意思是一个Person有一个Person列表。映射是:

  <class name="Person" table="Person_Person" >
    <id name="Id" type="Int64" unsaved-value="0">
      <generator class="native" />
    </id>
    <bag name="Families" inverse="true" table="Person_Family" cascade="delete" >
      <key column="Person_id_fk"/>
      <one-to-many class="Domain.Entities.Family,RCISP.Domain.Entities"/>
    </bag>
  </class>

在这个项目中,我通过ID获取一个人,然后在person中向families字段添加一个家庭并保存person。

Person person = SessionInstance.Get<Person>(id);
Family family = new Family();
family.Name = "Ehsan";
person.Families.Add(family);
SessionInstance.Save(person);

人保存在数据库中,但家庭不适用,因为延迟加载是活跃的。但是如果在添加家庭之前,执行count on families,我的问题就解决了。

int i = person.Families.Count; //Provisional For call in lazy loading
person.Families.Add(family);
SessionInstance.Save(person);

如何添加一个家庭到人不直接加载家庭的人?

如何在实体中加载一个对象列表

您需要将Families集合上的级联样式更改为all-delete-orphanall

<bag name="Families" inverse="true" table="Person_Family" cascade="all-delete-orphan" >
      <key column="Person_id_fk"/>
      <one-to-many class="Domain.Entities.Family,RCISP.Domain.Entities"/>
</bag>