如何仅从FluentNhibernate HasManyToMany映射中获取ID

时间:2011-10-25 23:17:58

标签: nhibernate fluent-nhibernate nhibernate-mapping many-to-many

说我有两个实体。

public class Category{
    public virtual int Id{get;set;}
    public virtual IList<Post> Posts{get;set;}
}

public class Post{
    public virtual int Id{get;set;}
    public virtual string Title{get;set;}
}

在Db中有一个多对多的表

  

CategoryPostRel

     
      
  • 类别ID
  •   
  • 帖子ID
  •   

类别地图然后如下所示:

public CategoryMap()
    {   
        HasManyToMany(x => x.Posts)
            .Table("CategoryPostRel")
            .ParentKeyColumn("CategoryId")
            .ChildKeyColumn("PostId");
    }

好的,但是说我只想要帖子中的Ids。所以我将我的类别实体更改为这样。

    public class Category{
    public virtual int Id{get;set;}
    public virtual IList<int> PostIds{get;set;}
}

现在,我如何使用我的映射获取ID,因为HasManyToMany映射实体,而不是列?

请注意,我根本无法更改数据库,而且多对多表没有唯一标识符。

    public CategoryMap()
    {   
        HasManyToMany(x => x.PostIds)
            .Table("CategoryPostRel")
            .ParentKeyColumn("CategoryId")
            .ChildKeyColumn("PostId").HowDoIgetTheIds...?
    }

1 个答案:

答案 0 :(得分:1)

您可以创建一个模拟此关系CategoryPost的实体,并执行以下操作:

public CategoryMap()
{   
    HasMany(x => x.CategoryPostIds)
        .KeyColumn("CategoryId")

}

public CategoryPostMap
{
    CompositeId()
        .KeyProperty(x => x.PostId)
        .KeyProperty(x => x.CategoryId)
}

这显然不是一个理想的解决方案,但可能有效。