NHibernate Collection子查询

有没有办法为NHibernate的映射添加标准?

public class Course { public IList Participants { get; set; } public IList ActiveParticipants { get; set; } } 

第二个属性ActiveParticipants应该是其“状态”设置为“活动”的参与者列表。 否则,有没有办法对该类进行后处理,但仍然保持延迟加载,因为有时不会使用“ActiveParticipants”属性。

它需要像这样而不是使用LINQ的原因是将类注入到动态“Mustache”模板中,该模板仅适用于标准属性。 还有几个这样的类似属性。

如果你有参与者的子类,其状态是DiscriminatorValue,我认为你可以将它们作为单独的列表,因为这样nHibernate知道如何区分它们。

 public class ParticipantMap : ClassMap { public ParticipantMap() { DiscriminateSubClassesOnColumn("Status"); } } public class ActiveParticipantMap : SubclassMap { public ActiveParticipantMap () { DiscriminatorValue("Active"); } } // other subclasses of participant eg NonActive, etc. public class Course { public IList Participants {get;set;} public IList ActiveParticipants {get;set;} // any other lists of participant subclasses that you may have } 

看来,在这种情况下,我们需要“动态”过滤。 映射的集合有时包含所有记录,有时只包含符合某些过滤条件的记录。

正是为此,我们有:

18.1。 NHibernatefilter

NHibernate增加了预定义过滤条件的能力,并在类和集合级别附加这些filter。 过滤条件是能够定义与类和各种集合元素上现有的“where”属性非常相似的限制子句。 除了这些过滤条件可以参数化。 然后,应用程序可以在运行时决定是否应该启用给定的filter以及它们的参数值应该是什么。 filter可以像数据库视图一样使用,但在应用程序内部进行参数化。

为了使用filter,必须首先定义它们,然后将它们附加到适当的映射元素。 要定义filter,请使用元素中的元素:

    

然后,这个filter可以附加到一个类:

  ...   

或者,到一个集合:

    

在这里查看更多细节(xml)

  • 是否可以使用NHibernatefilter来过滤引用?
  • NHibernate加载实体与子集合的一部分

(流利的映射)

  • 限制集合仅检索只读实体的最近条目

您不需要子查询来加载具有附加条件的集合。

 HasMany(x => x.ActiveParticipants).Where("Status = 'Active'");