2012-01-31 3 views
0

성 액티브의 하위 항목에 대한 절은 다음과 같은 두 개의 엔티티 생성 위치를 추가하는 방법 :내가 성 액티브를 사용하고

[ActiveRecord("Teams")] 
public class Team : ActiveRecordLinqBase<Team> 
{ 
    public Team() 
    { 
     Members = new List<Member>(); 
    } 

    [PrimaryKey] 
    public int Id { get; set; } 

    [Property("TeamName")] 
    public string Name { get; set; } 

    [Property] 
    public string Description { get; set; } 

    [HasMany(Inverse = true, 
      Lazy = true, 
      Cascade = ManyRelationCascadeEnum.AllDeleteOrphan)] 
    public virtual IList<Member> Members { get; set; } 
} 

[ActiveRecord("Members")] 
public class Member : ActiveRecordLinqBase<Member> 
{ 
    [PrimaryKey] 
    public int Id { get; set; } 

    [Property] 
    public string FirstName { get; set; } 

    [Property] 
    public string Lastname { get; set; } 

    [Property] 
    public string Address { get; set; } 

    [BelongsTo("TeamId")] 
    public Team Team { get; set; } 
} 

를 내가 필터링 팀 데이터 그래서

IList<ICriterion> where = new List<ICriterion>(); 
where.Add(Expression.Eq("Name", "name1")); 
ICriterion[] criteria = where.ToArray(); 

var teams = Team.FindAll(criteria); 

을 가지고 ICriterion을 사용 그것은 잘 작동하지만 Members 테이블에 다른 필터를 추가하고 싶습니다. 결과 쿼리는 다음과 같습니다.

select * 
    from Teams t join Member m on t.Id = m.TeamId 
where t.Name = 'name1' 
    and m.Address = 'address' 

ICriterion을 사용하여 어떻게 완료합니까? Team.Members 속성에 대한 기준을 추가하는 방법을 의미합니다. LINQ를 사용하지 않습니다. 이것은 당신이 NHibernate에 결과를 사용할 수있는 패치 하나에 모두 팀 및 구성원을 반환 Team.To에만 돌아갑니다

답변

2

을 (나는이 쉽게 LINQ를 사용하여 수행 할 수있는 알) 당신은 DetachedCriteria

DetachedCriteria criteriaTeam = DetachedCriteria.For<Team>(); 
DetachedCriteria criteriaMember = criteriaTeam .CreateCriteria("Members"); 
criteriaTeam .Add(Expression.Eq("Name", "name1")); 
criteriaMember.Add(Expression.Eq("Address", "address")); 
ICriteria executableCriteria = criteriaTeam .GetExecutableCriteria(session); 
executableCriteria.List<Team>(); 

을 사용할 수 있습니다 가입 변환기 Projections in NHibernate

+0

감사합니다 an2, 귀하의 코드는 세션 때문에 NHibernate를 사용하는 것 같다, 내 사건은 성 ActiveRecord, 어쨌든 나는 당신의 코드에서 아이디어를 얻었다. – Ray

관련 문제