C# NHibernate:尝试保存相同对象类型的子对象集合失败
我有一个类,它本身具有一对多关系,当试图保存一个子类集合时,只保存第一个子类,下面是我的映射:C# NHibernate:尝试保存相同对象类型的子对象集合失败,c#,nhibernate,C#,Nhibernate,我有一个类,它本身具有一对多关系,当试图保存一个子类集合时,只保存第一个子类,下面是我的映射: <class name="AMU" table="AMU"> <id name="ID" column="ID"> <generator class="identity"/> </id> <many-to-one name="_Manager" class="AMU" colu
<class name="AMU" table="AMU">
<id name="ID" column="ID">
<generator class="identity"/>
</id>
<many-to-one name="_Manager" class="AMU" column="ParentID" access="field"/>
<many-to-one name="User" column="UserID"/>
<many-to-one name="MCT" column="MctID"/>
<set name="ManagedAMUs" fetch="select" cascade="all-delete-orphan" inverse="false">
<key column="ParentID"/>
<one-to-many class="AMU"/>
</set>
</class>
然后保存父AMU,它只保存一个子AMU。这个问题与以下事实有关:NHiberante
(与
相比)代表一组独特的记录。如何修复它?有两种非常不同的方式:
更改为
AMU
类中实现bool Equals(object obj)
和int GetHashCode()
的角度来看,调用方法GetHashCode()
和Equals()
在这种情况下,我们需要区分子对象(由于层次结构的性质,父对象也是如此)。它应该
- 不是基于代理密钥(ID),而是
- e、 g.在代码或名称等属性上。。。或组合。或者在上面的示例中,在User.ID上
更改为
,我们的映射实体也应该覆盖这些方法。这只是一个好的做法
public class AMU : TABS.Components.BaseEntity
{
public AMU()
{
this.User = null;
this.Manager = null;
this.ManagedAMUs = new List<AMU>();
}
public virtual int ID { get; set; }
public virtual User User { get; set; }
private AMU _Manager;
public virtual AMU Manager
{
get { return _Manager; }
set { _Manager = value; }
}
public virtual ICollection<AMU> ManagedAMUs { get; set; }
public virtual MCT MCT { get; set; }
}
foreach(var amu in AMUList)
{
myAMU.ManagedAMUs.Add(amu);
}