How to order a HasMany collection by a child property with Fluent NHibernate mapping

Posted by Geoff Hardy on Stack Overflow See other posts from Stack Overflow or by Geoff Hardy
Published on 2010-06-11T16:49:29Z Indexed on 2010/06/11 16:52 UTC
Read the original article Hit count: 295

I am using Fluent NHibernate to map the following classes:

public abstract class DomainObject
{
    public virtual int Id { get; protected internal set; }
}

public class Attribute
{
    public virtual string Name { get; set; }
}

public class AttributeRule
{
    public virtual Attribute Attribute { get; set; }
    public virtual Station Station { get; set; }
    public virtual RuleTypeId RuleTypeId { get; set; }
}

public class Station : DomainObject
{
    public virtual IList<AttributeRule> AttributeRules { get; set; }

    public Station()
    {
        AttributeRules = new List<AttributeRule>();
    }
}

My Fluent NHibernate mappings look like this:

    public class AttributeMap : ClassMap<Attribute>
    {
        public AttributeMap()
        {
            Id(o => o.Id);
            Map(o => o.Name);
        }
    }

    public class AttributeRuleMap : ClassMap<AttributeRule>
    {
        public AttributeRuleMap()
        {
            Id(o => o.Id);
            Map(o => o.RuleTypeId);
            References(o => o.Attribute).Fetch.Join();
            References(o => o.Station);
        }
    }

    public class StationMap : ClassMap<Station>
    {
        public StationMap()
        {
            Id(o => o.Id);
            HasMany(o => o.AttributeRules).Inverse();
        }
    }

I would like to order the AttributeRules list on Station by the Attribute.Name property, but doing the following does not work:

   HasMany(o => o.AttributeRules).Inverse().OrderBy("Attribute.Name");

I have not found a way to do this yet in the mappings. I could create a IQuery or ICriteria to do this for me, but ideally I would just like to have the AttributeRules list sorted when I ask for it.

Any advice on how to do this mapping?

© Stack Overflow or respective owner

Related posts about nhibernate

Related posts about fluent-nhibernate