Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Fluent Nhibernate映射相关项_C#_Fluent Nhibernate_Mapping - Fatal编程技术网

C# Fluent Nhibernate映射相关项

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

我试图把两个项目联系起来。我有一个表,它只是一个Id字段,然后有两列用于关联项Id。我希望它是一个双向关系-也就是说,如果项目在表中出现两次,我只希望返回一个关系连接

这是我的项目:

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");