如何使用Fluent NHibernate映射通过子属性对HasMany集合进行排序

时间:2010-06-11 16:49:29

标签: nhibernate fluent-nhibernate nhibernate-mapping mapping sql-order-by

我正在使用Fluent NHibernate来映射以下类:

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映射看起来像这样:

    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();
        }
    }

我想通过Attribute.Name属性在Station上订购AttributeRules列表,但是执行以下操作不起作用:

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

我还没有找到在映射中执行此操作的方法。我可以创建一个IQuery或ICriteria为我这样做,但理想情况下我只想在我要求时对AttributeRules列表进行排序。

有关如何进行此映射的任何建议吗?

1 个答案:

答案 0 :(得分:0)

我认为OrderBy方法接受它插入生成的SQL子句的字符串。所以只是做

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

“Name”是包含Attribute名称的列的名称。它应该在列列表中,因为Attribute连接到AttributeRule。

你有没有解决这个问题?请分享。