C# Fluent Nhibernate映射相关项
我试图把两个项目联系起来。我有一个表,它只是一个Id字段,然后有两列用于关联项Id。我希望它是一个双向关系-也就是说,如果项目在表中出现两次,我只希望返回一个关系连接 这是我的项目:C# Fluent Nhibernate映射相关项,c#,fluent-nhibernate,mapping,C#,Fluent Nhibernate,Mapping,我试图把两个项目联系起来。我有一个表,它只是一个Id字段,然后有两列用于关联项Id。我希望它是一个双向关系-也就是说,如果项目在表中出现两次,我只希望返回一个关系连接 这是我的项目: public class Item { public virtual Guid ItemId {get; set;} public virtual string Name {get; set;} public virtual IList<Item> RelatedItems {ge
public class Item
{
public virtual Guid ItemId {get; set;}
public virtual string Name {get; set;}
public virtual IList<Item> RelatedItems {get; set;}
}
映射此连接的最佳方式是什么?您需要使用“HasMany”映射。我认为以下措施可能有效:
public class Item : ClassMap<Item>
{
Id(x=>x.Id)
.Column("ItemId");
Map(x=>x.Name);
HasMany(x=>x.RelatedItems)
.KeyColumn("RelatedId")
.Table("RelatedItems")
.LazyLoad()
.AsList();
}
公共类项:类映射
{
Id(x=>x.Id)
.列(“项目ID”);
Map(x=>x.Name);
HasMany(x=>x.RelatedItems)
.KeyColumn(“RelatedId”)
.表格(“相关项目”)
.LazyLoad()
.AsList();
}
始终可以对Id字段使用约定。考虑HasMany集合上的级联删除选项。 < P>我不得不硬着头皮做(读黑客)。
然后在我的类中,我有一个名为RelatedItems的只读集合,它连接两个列表并选择不同的项返回。问题是,这种关系只能以一种方式工作。我需要它双向工作。
public class Item : ClassMap<Item>
{
Id(x=>x.Id)
.Column("ItemId");
Map(x=>x.Name);
HasMany(x=>x.RelatedItems)
.KeyColumn("RelatedId")
.Table("RelatedItems")
.LazyLoad()
.AsList();
}
HasManyToMany(x => x.RelatedTo)
.Table("RelatedItems")
.ParentKeyColumn("ItemId")
.ChildKeyColumn("RelatedItemId");
HasManyToMany(x => x.RelatedToMe)
.Table("RelatedItems")
.ChildKeyColumn("ItemId")
.ParentKeyColumn("RelatedItemId");