Fluent nhibernate FluentNHibernate将多对多映射到同一实体,或者如何映射图形?
我需要在数据库中存储一个图形数据结构 这意味着一个实体可以有无限数量的相同类型的相关实体(相关实体也可以有无限数量的相关实体) 我想多对多的关系可以解决我的问题 我尝试使用FluentNHibernate进行映射,但以下代码不会为EntityEntity表的CREATE TABLE生成SQL: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");
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是一个软可删除的实体)
如果您需要一些单元测试来了解它是如何工作的,请告诉我