对关系类型有限制的NHibernate父子联接

对关系类型有限制的NHibernate父子联接,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,我有一个班级单位(例如公司),与其他单位有很多关系我无法更改数据库结构。数据库看起来像: Units: UnitID UnitName ... UnitToUnitRelationships: FromUnitID ToUnitID RelationshipType 我需要在查询时限制RelationshipType。我目前有一个带有ISet ChildUnits和ISet ParentUnits的单元类(因为在不同的关系类型下,您可能有不同的父对象)。我在我的领域中不需要Relations

我有一个班级单位(例如公司),与其他单位有很多关系我无法更改数据库结构。数据库看起来像:

Units:
UnitID
UnitName
...

UnitToUnitRelationships:
FromUnitID
ToUnitID
RelationshipType
我需要在查询时限制RelationshipType。我目前有一个带有ISet ChildUnits和ISet ParentUnits的单元类(因为在不同的关系类型下,您可能有不同的父对象)。我在我的领域中不需要RelationshipType;我只关心一种特殊的类型。如果我在编写自己的SQL,我只需确保所有查询在
ON
WHERE
子句中都有
RelationshipType='FOO'

我正在使用Fluent进行映射;我现有的子映射如下所示:

HasManyToMany(x => x.ChildUnits).AsSet().Cascade.None().
 Table("UnitToUnitRelationships").Not.LazyLoad().Fetch.Subselect().
 ParentKeyColumn("ToUnitID").ChildKeyColumn("FromUnitID").BatchSize(1000);

我想我可能需要创建一个
UnitToUnitRelationship
类并处理它,但是如果有更简单的方法,我当然更愿意这样做,特别是因为如上所述,我不需要域中的属性。

您应该查看
.Where()
和/或
.ChildWhere()
方法

  • .Where()
    应用于参考表
  • .ChildWhere()
    应用于子表

  • 因此,我认为您应该使用
    .Where(“RelationshipType='FOO')
    来解决您的问题。

    您应该查看
    .Where()
    和/或
    .ChildWhere()
    方法

  • .Where()
    应用于参考表
  • .ChildWhere()
    应用于子表

  • 因此,我认为您应该使用
    .Where(“RelationshipType='FOO')
    来解决您的问题。

    是的,这就成功了!非常有用,我不知道mapping类上的特定方法。是的,这就成功了!非常有用,不知道映射类上的特定方法。