Fluent nhibernate FluentNHibernate将多对多映射到同一实体,或者如何映射图形?

Fluent nhibernate FluentNHibernate将多对多映射到同一实体,或者如何映射图形?,fluent-nhibernate,graph,many-to-many,Fluent Nhibernate,Graph,Many To Many,我需要在数据库中存储一个图形数据结构 这意味着一个实体可以有无限数量的相同类型的相关实体(相关实体也可以有无限数量的相关实体) 我想多对多的关系可以解决我的问题 我尝试使用FluentNHibernate进行映射,但以下代码不会为EntityEntity表的CREATE TABLE生成SQL: HasManyToMany(x => x.RelatedEntities).ChildKeyColumn("RelateEntityID").ParentKeyColumn("EntityID");

我需要在数据库中存储一个图形数据结构

这意味着一个实体可以有无限数量的相同类型的相关实体(相关实体也可以有无限数量的相关实体)

我想多对多的关系可以解决我的问题

我尝试使用FluentNHibernate进行映射,但以下代码不会为EntityEntity表的CREATE TABLE生成SQL:

HasManyToMany(x => x.RelatedEntities).ChildKeyColumn("RelateEntityID").ParentKeyColumn("EntityID"); 
我做错什么了吗?或者我应该创建一个单独的实体并使用HasMany()进行映射吗


多谢各位

关于你的问题,我将创建一个实体,其中有一个父实体和一个子实体列表

这是我的样本:

public class GrafNode : AdvanceEntity
    {
        public GrafNode()
        {
            this.Children = new List<GrafNode>();
        }

        public virtual string Name  { get; set; }

        public virtual GrafNode Parent { get; set; }

        public virtual IList<GrafNode> Children { get; private set; }

        public virtual void AddChild(GrafNode node)
        {
            node.Parent = this;
            this.Children.Add(node);
        }
    }
公共类GrafNode:AdvanceEntity
{
公共GrafNode()
{
this.Children=新列表();
}
公共虚拟字符串名称{get;set;}
公共虚拟GrafNode父级{get;set;}
公共虚拟IList子项{get;private set;}
公共虚拟void AddChild(GrafNode节点)
{
node.Parent=this;
this.Children.Add(节点);
}
}
映射覆盖类为:

public class GrafNodeMappingOverride : IAutoMappingOverride<GrafNode>
{
    public void Override(AutoMapping<GrafNode> mapping)
    {
        mapping.HasOne(x => x.Parent);
        mapping.HasMany(x => x.Children).KeyColumn("parentId");
    }
}
公共类GrafNodeMappingOverride:IAutoMappingOverride
{
公共无效替代(自动映射)
{
mapping.HasOne(x=>x.Parent);
mapping.HasMany(x=>x.Children).KeyColumn(“parentId”);
}
}
正如您所看到的,一个节点可以有一个父节点和一系列子节点

这是我的表结构,请忽略DeletedBy和DeletedDate(ower AdvanceEntity是一个软可删除的实体)


如果您需要一些单元测试来了解它是如何工作的,请告诉我。

关于您的问题,我将创建一个包含一个父项和一个子项列表的实体

这是我的样本:

public class GrafNode : AdvanceEntity
    {
        public GrafNode()
        {
            this.Children = new List<GrafNode>();
        }

        public virtual string Name  { get; set; }

        public virtual GrafNode Parent { get; set; }

        public virtual IList<GrafNode> Children { get; private set; }

        public virtual void AddChild(GrafNode node)
        {
            node.Parent = this;
            this.Children.Add(node);
        }
    }
公共类GrafNode:AdvanceEntity
{
公共GrafNode()
{
this.Children=新列表();
}
公共虚拟字符串名称{get;set;}
公共虚拟GrafNode父级{get;set;}
公共虚拟IList子项{get;private set;}
公共虚拟void AddChild(GrafNode节点)
{
node.Parent=this;
this.Children.Add(节点);
}
}
映射覆盖类为:

public class GrafNodeMappingOverride : IAutoMappingOverride<GrafNode>
{
    public void Override(AutoMapping<GrafNode> mapping)
    {
        mapping.HasOne(x => x.Parent);
        mapping.HasMany(x => x.Children).KeyColumn("parentId");
    }
}
公共类GrafNodeMappingOverride:IAutoMappingOverride
{
公共无效替代(自动映射)
{
mapping.HasOne(x=>x.Parent);
mapping.HasMany(x=>x.Children).KeyColumn(“parentId”);
}
}
正如您所看到的,一个节点可以有一个父节点和一系列子节点

这是我的表结构,请忽略DeletedBy和DeletedDate(ower AdvanceEntity是一个软可删除的实体)

如果您需要一些单元测试来了解它是如何工作的,请告诉我