流畅的NHibernate - 同一个表中的多个集合

时间:2013-08-09 08:01:51

标签: c#-4.0 collections fluent-nhibernate fluent-nhibernate-mapping

我正致力于重建客户端软件,他们希望尽可能保持数据库不被修改。

我得到了一张桌子,他们收集不同公司的用户和订单,没有大问题,但他们为多个实体做了这样的转折。

例如,表格如下所示:

  • ID
  • 用户ID
  • 索引
  • CompanyID
  • 类型

我们说他们有像Project和Workflow这样的实体,然后Type列为项目的“ P ”,工作流的“ W ”。因此ID上是项目或工作流标识的ID。 UserID始终是User实体的外键,Index是使用此Project / Workflow时用户的顺序。 CompanyID是公司拥有的项目或工作流实体。

我试图搜索谷歌这个,但我什么也没想到。

我想要的是在模板实体地图上有两个集合说StandardProjectUsers和StandardWorkflowUsers,他们应该从具有当前公司的用户和索引的正确实体中收集它们。

这是否可以使用流利的nhibernate?

1 个答案:

答案 0 :(得分:2)

关于如何操作的好文章:http://www.philliphaydon.com/2011/08/fluent-nhibernate-table-inheritance-discriminators/

您正在寻找table-per-hierarchy策略。

简而言之,您使用:

public class BaseClassMap : ClassMap<BaseClass>
{
    public BaseClassMap()
    {
        DiscriminateSubClassesOnColumn("Type");
        ...
    }
} 

public class WorkflowMap : SubclassMap<Workflow>
{
    public WorkflowMap()
    {
        DiscriminatorValue("W");
        ...
    }
}

public class ProjectMap : SubclassMap<Project>
    {
        public ProjectMap()
        {
            DiscriminatorValue("P");
            ...
        }
    }