了解 nhibernate 映射中的递归关系

本文关键字:递归 关系 nhibernate 映射 了解 | 更新日期: 2023-09-27 18:31:23

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

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

现在我想添加功能,即一个Page可以有一个或多个Page或一个或多个页面可以属于一个父Page

您将如何做到这一点,以及如何根据此要求映射(使用 nhibernate)此页面实体?

任何类型的映射都可以(流畅,通过代码,...

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

了解 nhibernate 映射中的递归关系

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

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");
    }
}

我将其与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;
    }
}