0
我有这种情况:混合双/单方向的节点 - (流利)NHibernate的
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之间的连接没有坚持下去。也许我必须改变领域模型,但我希望能够实现这种'单向/双向的混合'。
谢谢。
PPS:
保存:
INHibernateRepository<Node> NodeRepository = new NHibernateRepository<Node>();
...
NodeRepository.SaveOrUpdate(Node1); // save topnode
NodeRepository.DbContext.CommitChanges();
谢谢明天我会看看这个。我试图在过去删除Inverse,它不起作用。我的对象图不是很大,所以Not.LazyLoad没问题。 – cs0815 2012-07-31 18:24:30
抱歉删除逆向没有任何区别。 – cs0815 2012-08-01 07:44:42
你最近怎么节约?你在做交易中的一切吗? – 2012-08-01 10:14:34