Как заказать коллекцию HasMany по дочернему свойству с отображением Fluent NHibernate - PullRequest
2 голосов
/ 11 июня 2010

Я использую 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>();
    }
}

Мои сопоставления 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();
        }
    }

Я бы хотел упорядочить список AttributeRules на Station по свойству Attribute.Name, но выполнение следующих действий не работает:

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

Я еще не нашел способ сделать это в отображениях. Я мог бы создать IQuery или ICriteria, чтобы сделать это для меня, но в идеале я хотел бы просто отсортировать список AttributeRules, когда я его запрашиваю.

Какой-нибудь совет, как сделать это отображение?

1 Ответ

0 голосов
/ 15 декабря 2010

Я думаю, что OrderBy-метод принимает строку, которую он вставляет в сгенерированное SQL-предложение.Так что просто делаем

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

, где "Имя" - это имя столбца, который содержит имя атрибута.Он должен быть в списке столбцов, потому что Атрибут присоединен к AttributeRule.

Вы решили этот другой путь?Пожалуйста, поделитесь.

...