Fluent nhibernate带外部表的m-to-m映射

Fluent nhibernate带外部表的m-to-m映射,nhibernate,fluent-nhibernate,mapping,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Mapping,Fluent Nhibernate Mapping,我在Oracle中有两个表 Entity ---------- **EntityId** NUMBER(9), **EntityName** VARCHAR2 EntityLinks -------------- **EntityLinkId** NUMBER(9),**ParentEntityId** NUMBER(9), **ChildEntityId** NUMBER(9) 表EntityLinks将存储各种实体之间的多个关系ParentEntityId和ChildEntityId与实

我在Oracle中有两个表

Entity
----------
**EntityId** NUMBER(9), **EntityName** VARCHAR2

EntityLinks
--------------
**EntityLinkId** NUMBER(9),**ParentEntityId** NUMBER(9), **ChildEntityId** NUMBER(9)
表EntityLinks将存储各种实体之间的多个关系ParentEntityIdChildEntityId实体有外键关系

我有一个以下的实体类以及

public class Entity
{
     public virtual int EntityId {get; set}
     public virtual IList<Entity> ParentEntities {get; set}
     public virtual IList<Entity> ChildEntities{get; set}
}

public class EntityLinks
{
     public virtual int EntityLinkId {get; set}
     public virtual Entity ParentEntityId {get; set}
     public virtual Entity ChildEntityId {get; set}
}
公共类实体
{
公共虚拟int EntityId{get;set}
公共虚拟IList父实体{get;set}
公共虚拟IList子实体{get;set}
}
公共类实体链接
{
公共虚拟int EntityLinkId{get;set}
公共虚拟实体parentityid{get;set}
公共虚拟实体ChildEntityId{get;set}
}
以下是这两个类的映射:

public class EntityMap : ClassMap<Entity>
{
  public EntityMap()
  {
    Table("Entity")
    Id(x=>x.EntityId).GeneratedBy.Increment();
    *---- How to map for ParentEntities and ChildEntites?----*
  }
}

public class EntityLinksMap : ClassMap<Entity>
{
  public EntityMap()
  {
    Table("Entity")
    Id(x=>x.EntityId).GeneratedBy.Increment();
    References(x=>x.ParentEntityId).Column("ParentEntityId");
    References(x=>x.ChildEntityId).Column("ChildEntityId");
  }
}
公共类EntityMap:ClassMap
{
公共实体映射()
{
表(“实体”)
Id(x=>x.EntityId).GeneratedBy.Increment();
*----如何映射父实体和子实体----*
}
}
公共类EntityLinksMap:ClassMap
{
公共实体映射()
{
表(“实体”)
Id(x=>x.EntityId).GeneratedBy.Increment();
引用(x=>x.ParentEntityId).Column(“ParentEntityId”);
引用(x=>x.ChildEntityId).Column(“ChildEntityId”);
}
}

我的问题是,我应该如何在实体类中为ParentEntities和ChildEntities进行映射,以便获得特定实体的父级和子级列表?

我想说,使用中间表中的人作为标准映射实体真的很好

我说的是这样一个事实,我们可以使用映射,而不用将配对表表示为映射实体。语法将是
hasmanytomy

但由于您选择将配对表作为一个实体,因此必须更改业务模式:

public class Entity
{
     public virtual int EntityId {get; set}
     //public virtual IList<Entity> ParentEntities {get; set}
     //public virtual IList<Entity> ChildEntities{get; set}
     public virtual IList<EntityLinks> ParentEntityLinks {get; set}
     public virtual IList<EntityLinks> ChildEntityLinks {get; set}
}
有关
的更多信息有许多
映射:

亚当·巴尔 向下滚动至Fluent NHibernate的等效版本

HasMany(x => x.Users)
    .AsSet<CustomComparer>() // or .AsSet(), .AsBag()
    .Fetch.Join()
    .BatchSize(100)
    .LazyLoad() // or .ExtraLazyLoad()
    .Table("tableName")
    .Schema("schemaName")
    .Cascade.AllDeleteOrphan() // or .None(), .SaveUpdate(), .All(), DeleteOrphan()
    .Inverse()
    ...
    // and many more settings
    ...

…我不建议使用它:或者,如果…

我找到了要使用的映射,下面是一些如何使用的详细信息。我只是对眼前的问题感到困惑,因为这是自我参照

public class EntityMap : ClassMap<Entity>
{
  public EntityMap()
  {
    Table("Entity")
    Id(x=>x.EntityId).GeneratedBy.Increment();

   //solution mapping
    HasManyToMany(x => x.ChildEntities)
             .Table("EntityLinks")
             .ParentKeyColumn("ParentEntityId")
             .ChildKeyColumn("ChildEntityId");
        HasManyToMany(x => x.ParentEntities)
             .Table("EntityLinks")
             .ParentKeyColumn("ChildEntityId")
             .ChildKeyColumn("ParentEntityId");

  }
}

public class EntityLinksMap : ClassMap<EntityLinks>
{
  public EntityMap()
  {
    Table("EntityLinks")
    Id(x=>x.EntityId).GeneratedBy.Increment();
    References(x=>x.ParentEntityId).Column("ParentEntityId");
    References(x=>x.ChildEntityId).Column("ChildEntityId");
  }
}
公共类EntityMap:ClassMap
{
公共实体映射()
{
表(“实体”)
Id(x=>x.EntityId).GeneratedBy.Increment();
//解映射
HasManyToMany(x=>x.ChildEntities)
.表格(“实体链接”)
.ParentKeyColumn(“ParentEntityId”)
.ChildKeyColumn(“ChildEntityId”);
HasManyToMany(x=>x.ParentEntities)
.表格(“实体链接”)
.ParentKeyColumn(“ChildEntityId”)
.ChildKeyColumn(“ParentEntityId”);
}
}
公共类EntityLinksMap:ClassMap
{
公共实体映射()
{
表(“实体链接”)
Id(x=>x.EntityId).GeneratedBy.Increment();
引用(x=>x.ParentEntityId).Column(“ParentEntityId”);
引用(x=>x.ChildEntityId).Column(“ChildEntityId”);
}
}
 public virtual IList<Entity> ParentEntities {get; set}
 public virtual IList<Entity> ChildEntities{get; set}
HasManyToMany(x => x.ParentEntities)...
HasManyToMany(x => x.ChildEntities)...
public class EntityMap : ClassMap<Entity>
{
  public EntityMap()
  {
    Table("Entity")
    Id(x=>x.EntityId).GeneratedBy.Increment();

   //solution mapping
    HasManyToMany(x => x.ChildEntities)
             .Table("EntityLinks")
             .ParentKeyColumn("ParentEntityId")
             .ChildKeyColumn("ChildEntityId");
        HasManyToMany(x => x.ParentEntities)
             .Table("EntityLinks")
             .ParentKeyColumn("ChildEntityId")
             .ChildKeyColumn("ParentEntityId");

  }
}

public class EntityLinksMap : ClassMap<EntityLinks>
{
  public EntityMap()
  {
    Table("EntityLinks")
    Id(x=>x.EntityId).GeneratedBy.Increment();
    References(x=>x.ParentEntityId).Column("ParentEntityId");
    References(x=>x.ChildEntityId).Column("ChildEntityId");
  }
}