基于NHibernate的双连通有序树映射

基于NHibernate的双连通有序树映射,nhibernate,orm,hbm,Nhibernate,Orm,Hbm,我们需要使用NHibernate映射简单类: public class CatalogItem { private IList<CatalogItem> children = new List<CatalogItem>(); public Guid Id { get; set; } public string Name { get; set; } public CatalogItem Parent { get; set; } pu

我们需要使用NHibernate映射简单类:

public class CatalogItem
{
    private IList<CatalogItem> children = new List<CatalogItem>();

    public Guid Id { get; set; }
    public string Name { get; set; }
    public CatalogItem Parent { get; set; }
    public IList<CatalogItem> Children
    {
        get { return children; }
    }        
    public bool IsRoot { get { return Parent == null; } }        
    public bool IsLeaf { get { return Children.Count == 0; } }
}
公共类目录项
{
private IList children=新列表();
公共Guid Id{get;set;}
公共字符串名称{get;set;}
公共CatalogItem父项{get;set;}
公营儿童
{
获取{返回子项;}
}        
public bool IsRoot{get{return Parent==null;}}
public bool IsLeaf{get{return Children.Count==0;}
}
互联网上有一批关于这一主题的教程,但没有一本涵盖一点令人讨厌的细节:我们需要将订单保存在儿童收藏中。我们尝试了以下映射,但它导致了NHibernate抛出的奇怪的例外(“非静态方法需要目标”)


有人有什么想法吗?

我不是专家,但是
在这个用法上对我来说很奇怪。您应该能够执行
,并且NHibernate将自动使用关联类的主键——在本例中为其本身

您可能还需要将列表设置为
inverse=“true”
,因为该关系是双向的。[参见文档中的第6.8节。]

我不是专家,但是
在这种用法中对我来说很奇怪。您应该能够执行
,并且NHibernate将自动使用关联类的主键——在本例中为其本身


您可能还需要将列表设置为
inverse=“true”
,因为该关系是双向的。[请参阅文档中的第6.8节。]

当我编译代码时,会收到一条错误消息“在“CatalogItem”类中找不到属性“Children”的setter。当我编译代码时,会收到一条错误消息“在“CatalogItem”类中找不到属性“Children”的setter”。
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Domain.Model" assembly="Domain">
    <class name="CatalogItem"  lazy="false">
        <id name="Id" type="guid">
            <generator class="guid" />
        </id>
        <property name="Name" />

        <many-to-one name="Parent" class="CatalogItem" lazy="false" />

        <list name="Children" cascade="all">
            <key property-ref="Parent"/>
            <index column="weight" type="Int32" />
            <one-to-many not-found="exception" class="CatalogItem"/>
        </list>        
    </class>
</hibernate-mapping>