图的fluent-nhibernate级联

图的fluent-nhibernate级联,nhibernate,fluent-nhibernate,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Fluent Nhibernate Mapping,为了更好地理解cascade。有人能解释一下为什么在下面的情况下节点C和D不能持久化吗?谢谢 public class Node : Entity { public virtual Node Previous { get; set; } public virtual Node Next { get; set; } public virtual string Name { get; set; } public Node() { } public Node(

为了更好地理解cascade。有人能解释一下为什么在下面的情况下节点C和D不能持久化吗?谢谢

public class Node : Entity
{
    public virtual Node Previous { get; set; }
    public virtual Node Next { get; set; }
    public virtual string Name { get; set; }

    public Node() { }
    public Node(string Name)
    {
        this.Name = Name;
    }

    public virtual void Connect(Node Previous, Node Next)
    {
        this.Previous = Previous;
        this.Next = Next;
    }
}
映射:

public class NodeMap : IAutoMappingOverride<Node>
{
    public void Override(AutoMapping<Node> mapping)
    {
        mapping.References(x => x.Previous).Cascade.SaveUpdate(); 
        mapping.References(x => x.Next).Cascade.SaveUpdate(); 
    }
}
公共类节点映射:IAutoMappingOverride
{
公共无效替代(自动映射)
{
mapping.References(x=>x.Previous.Cascade.SaveUpdate();
mapping.References(x=>x.Next).Cascade.SaveUpdate();
}
}
数据创建:

INHibernateRepository<Node> NodeRepository = new NHibernateRepository<Node>();

Node A = new Node("A");
Node B = new Node("A");
Node C = new Node("C");
Node D = new Node("D");
Node E = new Node("E");
Node F = new Node("F");

A.Connect(null, B);
B.Connect(A, E);
C.Connect(B, E);
D.Connect(B, E);
E.Connect(B, F);
F.Connect(E, null);

NodeRepository.SaveOrUpdate(A);
NodeRepository.DbContext.CommitChanges();
INHibernateRepository noderpository=new NHibernateRepository();
节点A=新节点(“A”);
节点B=新节点(“A”);
节点C=新节点(“C”);
节点D=新节点(“D”);
节点E=新节点(“E”);
节点F=新节点(“F”);
A.连接(空,B);
B.连接(A,E);
C.连接(B,E);
D.连接(B,E);
E.连接(B,F);
F.连接(E,空);
NodeRepository.SaveOrUpdate(A);
NodeRepository.DbContext.CommitChanges();

您的图形如下所示

A <-> B <-> E <-> F

B <- C -> E
B <- D -> E
abef
B E
B E
如您所见,您没有从
A
C
和从
A
D
的链接(仅在相反方向)


因此,当您保存
A
NHibernate试图保存
A
的所有依赖项时,会找到未保存的
B
,然后是
E
,然后是
F

,我无法找到您要将哪个节点放置到存储库,我想是这样的。我可以做些什么来实现我想要的,只需要保存顶部节点(A)?不幸的是,没有。您需要
C
D
才能从
A