理解nhibernate映射中的递归关系

时间:2013-09-16 08:30:48

标签: c# nhibernate domain-driven-design

假设我有一个像这样的实体页面

public class Page
{
   public int Id {get; set;}
   public string Title {get; set;}
   public string Body {get; set;}
   ... to do
}

现在我想添加一个Page可以拥有一个或多个Page或一个或多个网页可以属于一个父Page的功能。

你会如何做到这一点?你如何在考虑这个要求的情况下映射(使用nhibernate)这个Page实体?

任何类型的映射都很好(流畅,代码,......)。

如果您需要更多信息,请询问。

2 个答案:

答案 0 :(得分:2)

你可以让他们自我引用..有点像这样:

Page
----
Id INT PRIMARY KEY IDENTITY
Title VARCHAR(50)
Body VARCHAR(500)
ParentId INT

然后,在Fluent中,你会有这样的事情:

public class Page {
    public virtual int Id { get; set; }
    public virtual string Title { get; set; }
    public virtual string Body { get; set; }
    public virtual Page Parent { get; set; }
    public virtual IList<Page> Children { get; set; }
}

public class PageClassMap : ClassMap<Page> {
    public PageClassMap() {
        Table("Page");
        Id(x => x.Id).GeneratedBy.Identity();
        Map(x => x.Title);
        Map(x => x.Body);
        References(x => x.Parent);
        HasMany(x => x.Children).KeyColumn("ParentId");
    }
}

答案 1 :(得分:0)

我在 FluentNhibernate

中使用它
References(x => x.ParentCategory).Column("ParentCategoryId").Cascade.SaveUpdate();
HasMany<Category>(x => x.ChildCategories).KeyColumn("ParentCategoryId").Cascade.SaveUpdate();

我有一个班级Category,有孩子和一个家长。

public class Category : Entity<long>
{
    public virtual IList<Category> ChildCategories
    {
        get;
        set;
    }

    public virtual Category ParentCategory
    {
        get;
        set;
    }
}