我有这种情况:
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; }
    }
}
一个节点最多可以有一个父节点和多个子节点。我使用这个映射文件:
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
但是 6 和 4 之间只有一个单向连接,因为 4 已经有一个父节点 3。
不幸的是,6 和 4 之间的连接没有持续。也许我必须更改域模型,但我希望能够实现这种“单/双方向性的混合”。
谢谢。
PP:
保存:
INHibernateRepository<Node> NodeRepository = new NHibernateRepository<Node>();
...
NodeRepository.SaveOrUpdate(Node1); // save topnode
NodeRepository.DbContext.CommitChanges();