Fluent nhibernate带外部表的m-to-m映射
我在Oracle中有两个表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与实
Entity
----------
**EntityId** NUMBER(9), **EntityName** VARCHAR2
EntityLinks
--------------
**EntityLinkId** NUMBER(9),**ParentEntityId** NUMBER(9), **ChildEntityId** NUMBER(9)
表EntityLinks将存储各种实体之间的多个关系ParentEntityId和ChildEntityId与实体有外键关系
我有一个以下的实体类以及
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");
}
}