私はこの状況にあります:
public abstract class Node : Entity
{
public virtual Node Parent { get; set; }
private ICollection<Node> _children = new HashSet<Node>();
public virtual ICollection<Node> Children
{
get { return _children; }
set { _children = value; }
}
}
ノードには、最大1つの親と複数の子を含めることができます。私はこのマッピングファイルを使用します:
public class NodeMap : IAutoMappingOverride<Node>
{
public void Override(AutoMapping<Node> mapping)
{
mapping.HasMany<Node>(x => x.Children)
.KeyColumn("ParentId")
.KeyNullable()
.AsSet()
.Inverse()
.Cascade.SaveUpdate()
.ForeignKeyConstraintName("FK_Node_ParentId")
.Not.LazyLoad();
}
}
ノード間の接続は、親を子に追加し、子を親に追加した場合にのみ保持されます。ただし、親が子に追加されたばかりの場合は、ノード間の「接続」を維持したいと思います。fnhマッピングでこれを達成できますか?
PS:
もう少し明確に指定してみましょう。5つのノード(1、2、3、4、5)があります。
これらの間には双方向の接続があります。
Parent <-> Child
1 <-> 2
2 <-> 3
2 <-> 6
3 <-> 4
4 <-> 5
ただし、4にはすでに3という親があるため、6と4の間の単方向接続のみです。
残念ながら、6と4の間の接続は維持されません。ドメインモデルを変更する必要があるかもしれませんが、この「ユニ/バイ指向性の混合」を実現できることを望んでいました。
ありがとう。
PPS:
保存:
INHibernateRepository<Node> NodeRepository = new NHibernateRepository<Node>();
...
NodeRepository.SaveOrUpdate(Node1); // save topnode
NodeRepository.DbContext.CommitChanges();