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 목록을 주문하고 싶지만 다음을 수행하면 작동하지 않습니다.

아직 매핑에서이 작업을 수행 할 방법을 찾지 못했습니다. 필자는이를 위해 IQuery 또는 ICriteria를 만들 수 있지만, 이상적으로는 요청할 때 정렬 된 AttributeRules 목록을 원합니다.

이 매핑을 수행하는 방법에 대한 조언이 있으십니까?

답변

0

OrderBy 메서드는 생성 된 SQL 절에 삽입되는 문자열을 사용한다고 생각합니다. 따라서 수행하는 것

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

여기서 "Name"은 Attribute의 이름이 들어있는 열의 이름입니다. Attribute는 AttributeRule에 조인되기 때문에 열 목록에 있어야합니다.

다른 방법으로 해결 했습니까? 공유하십시오.

+0

생성되는 문자열에 테이블 별칭이 포함되어 있으므로 이동하지 않습니다. – Dave

관련 문제