C# nHibernate在同一个表中有多个导致StackOverflowException

C# nHibernate在同一个表中有多个导致StackOverflowException,c#,nhibernate,fluent-nhibernate,stack-overflow,C#,Nhibernate,Fluent Nhibernate,Stack Overflow,我有一个名为Category的实体,它包含同一实体(Category)的多个子类别: 如果能提供一些我做错了什么或如何解决问题的建议,我将不胜感激 提前谢谢:)也许能帮上忙 HasMany(x => x.SubCategories).KeyColumn("ParentId").Inverse().Cascade.AllDeleteOrphan().AsBag(); 我发现了发生StackOverflowException的问题。子类别>父类别>子类别>父类别中存在递归,创建了一个无休止的

我有一个名为Category的实体,它包含同一实体(Category)的多个子类别:

如果能提供一些我做错了什么或如何解决问题的建议,我将不胜感激

提前谢谢:)

也许能帮上忙

HasMany(x => x.SubCategories).KeyColumn("ParentId").Inverse().Cascade.AllDeleteOrphan().AsBag();

我发现了发生
StackOverflowException
的问题。子类别>父类别>子类别>父类别中存在递归,创建了一个无休止的循环

我没有像@collenbrecht所说的那样使用
Inverse
,但我选择了一种不同的方法,稍微改变了我的数据结构:

我没有在类别上保存整个ParentCategory对象,而是只保存其Id。 我会在需要的时候把所有的东西都拿来。这消除了无休止的循环,解决了我的问题

我的分类类现在看起来像这样:

 public class Category : Entity
    {
        public virtual string Name { get; set; }
                public virtual IList<Category> SubCategories { get; set; } = new List<Category>();
        public virtual long? ParentId { get; set; }

        public Category()
        { }

        public Category(Category category)
        {
            SubCategories = new List<Category>();
        }
    }
public Category CreateCategory(CreateCategoryModel model)
        {
            var category = new Category
            {
                Name = model.Name,
            };
            if (model.ParentCategory == null) return category; // Up to here it works fine. - I save the category elsewhere.

            var parent = Get(model.ParentCategory.Id);
            category.ParentCategory = parent;
            parent.SubCategories.Add(category);
            _categoryRepository.SaveOrUpdate(parent);

            return category; // If I hit these lines of code I get the StackOverflow exception
        }
HasMany(x => x.SubCategories).KeyColumn("ParentId").Inverse().Cascade.AllDeleteOrphan().AsBag();
 public class Category : Entity
    {
        public virtual string Name { get; set; }
                public virtual IList<Category> SubCategories { get; set; } = new List<Category>();
        public virtual long? ParentId { get; set; }

        public Category()
        { }

        public Category(Category category)
        {
            SubCategories = new List<Category>();
        }
    }
 public class CategoryMap : NHibernateMap<Category>
    {
        public CategoryMap()
        {
            Map(x => x.Name);
            Map(x => x.ParentId);
            HasMany(x => x.SubCategories).Cascade.AllDeleteOrphan();
        }
    }
public Category CreateCategory(CreateCategoryModel model)
        {
            var category = new Category
            {
                Name = model.Name,
            };
            if (model.ParentCategory == null)
            {
                category.ParentId = null;
                return category;
            }

            var parent = Get(model.ParentCategory.Id);
            parent.SubCategories.Add(category);
            _categoryRepository.SaveOrUpdate(parent);
            category.ParentId = model.ParentCategory.Id;

            return category;
        }