2

我用流利的NHibernate映射的下列类来订购的hasMany集合:如何用流利的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>(); 
    } 
} 

我流利的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列表进行排序。

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

回答

0

我认为OrderBy方法需要插入到生成的SQL子句的字符串中。所以只是做

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

其中“名称”是包含属性的名称的列的名称。它应该位于列列表中,因为属性已连接到AttributeRule。

你是否解决了这个问题?请分享。

+0

它生成的字符串包含表别名,所以这是一个不行 – Dave 2013-11-28 16:14:22