c# - 同类的 Fluent/NHibernate Collections

标签 c# nhibernate fluent-nhibernate

我是 NHibernate 的新手,我无法在此类中映射以下关系。

public class Category : IAuditable
{
    public virtual int Id { get; set; }
    public virtual string Name{ get; set; }
    public virtual Category ParentCategory { get; set; }
    public virtual IList<Category> SubCategories { get; set; }

     public Category()
    {
        this.Name = string.Empty;
        this.SubCategories = new List<Category>();
    }

}

类映射(虽然,这些实际上是猜测)

public class CategoryMap : ClassMap<Category>
{
    public CategoryMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);

        References(x => x.ParentCategory)
            .Nullable()
            .Not.LazyLoad();

        HasMany(x => x.SubCategories)
            .Cascade.All();

    }
}

每个类别可能有一个父类别,一些类别有许多子类别,等等 我可以正确保存类别(正确的子类别和父类别 fk 存在于数据库中)但是在加载时,它返回自身作为父类别。

我正在使用 Fluent 进行类映射,但如果有人可以为我指出正确的方向,只使用普通的 NHibernate,那也可以。

最佳答案

按照惯例,Fluent NHibernate 会将“Category_Id”视为外键列。它不会找出您的“ParentCategoryId”列。除非您将自引用列重命名为“Category_Id”,否则您必须明确父子关系的列名。

对于没有父级的类别(绝对父级类别),其引用列为 null,根据 NHibernate 的处理方式返回自身作为父级或 null 是合理的,因为您选择了预先加载。

public class CategoryMap : ClassMap<Category> 
{ 
    public CategoryMap() 
    { 
        Id(x => x.Id); 
        Map(x => x.Name); 

        References(x => x.ParentCategory)
            .Column("ParentCategoryId")    // Many-To-One : parent
            .Nullable() 
            .Not.LazyLoad(); 

        HasMany(x => x.SubCategories) 
           .Cascade.All().Inverse().KeyColumn("ParentCategoryId");   //One-To-Many : chidren

    } 
} 

关于c# - 同类的 Fluent/NHibernate Collections,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2457739/

相关文章:

c# - 如何从数据网格组合框列中获取所选项目值

c# - 在 .NET 中运行线程操作时如何响应事件

nhibernate - Nhibernate : System. Data.SqlClient.SqlException 错误: 'Index' 附近的语法不正确

c# - PresentationFramework Aero、Aero2 或 AeroLite

c# - 我如何在 NHibernate 中进行通用字段和组件级更改跟踪?

c# - 将 SQL 转换为 QueryOver 以使用 group bys 获取行数

c# - NHibernate 有许多具有级联删除的集合失败

c# - 任何人都知道有关 Fluent Nhibernate 1.1 存储过程的任何体面资源

mysql - (Fluent) NHibernate composite-id 问题 : MySQL complains that the parameter index is out of bounds

c# - 什么时候在 CLR 中为泛型的不同实例共享代码?