【发布时间】:2012-12-07 15:42:20
【问题描述】:
我在使用 Fluent NHibernate 映射树结构时遇到了麻烦,而我也不必添加我认为是 hack 的东西。
考虑以下类:
-
Node(抽象,有int Id和GroupNode Parent(如果null,则节点驻留在根节点中)) -
GroupNode(继承自Node,具有IList<GroupNode> Groups和IList<ItemNode> Items) -
ItemNode(继承自Item)
理想情况下,这将具有以下数据库结构:
- GroupNodes(整数 ID,可为空的整数 ParentId)
- ItemNodes(整数 Id,可为空的整数 ParentId)
我的映射器如下所示:
public class GroupNodeMap : ClassMap<GroupNode>
{
public GroupNode()
{
Id(x => x.Id);
References(x => x.Parent);
HasMany(x => x.Groups).LazyLoad();
HasMany(x => x.Items).LazyLoad();
}
}
public class ItemNodeMap : ClassMap<ItemNode>
{
public ItemNodeMap()
{
Id(x => x.Id);
References(x => x.Parent);
}
}
不幸的是,这会创建一组重复的引用(每个表都有一个ParentId 和一个GroupNodeId。我可以通过在.LazyLoad() 之后添加.KeyColumn("ParentId") 来调整这种行为,但这感觉就像一个黑客,我希望它使用约定或 lambdas 而不是魔术字符串来表达。
谁能指出我正确的方向?
【问题讨论】:
-
我也有同样的问题...
-
你找到解决办法了吗?
标签: c# nhibernate fluent-nhibernate nhibernate-mapping