我有这种情况:
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();