2011-08-17 4 views
0

제목이 혼란 스럽습니다. 더 좋은 것으로 생각되면 혼란 스럽습니다. 변경하십시오.Nhibernate 기준 - 표 B에 정의 된 TypeId의 표 A에있는 행을 선택하십시오.

자전거, 소유자 및 자전거의 모든 소유자 또는 소유자의 모든 자전거를 정의하는 관계 테이블 (많은 것과 비슷한 것)과 같은 3 개의 테이블이 있습니다.

enter image description here

그래서, OwnerId 1 그러나 모든 자전거를 선택하려면, 내 매핑과 같이이다 :

BikeOwners references one Bike 
BikeOwners References one OWner 

어떻게이 작업을 수행하는 자 NHibernate의 기준을 작성하려면 어떻게해야합니까?

  DetachedCriteria crit = DetachedCriteria.For<Bikes>() 
      .Add(Expression.Eq("OwnerId", _ownerId)); 

과 오류 아웃 경우 ..

질문이 분명하다 희망 ...이없는 이해 자전거 테이블의 모든 OwnerId 말 : 지금

, 내가 노력하고 있어요 자세한 내용이 필요하면 물어보십시오!


은 내가 Bike owner 테이블에서 모든 자전거 아이디의 목록을 가져 첫번째 얻을 수있어 다음 int 배열이 bikes 테이블의 모든 자전거를 얻을 것을 사용 -하지만 - 그것은 두 개의 데이터베이스 액세스 내가 직접 그 일을하고있다 한 번에이 작업을 수행 할 수있는 방법이 있어야합니다.

이것은 내 계획 b입니다. 다른 모든 것이 실패하면, 저는 이것을 할 것입니다.

감사

+0

엔티티는 어떻게 정의되고 매핑됩니까? – AlexCuse

답변

1

은 정말 당신의 엔티티에 따라 달라집니다. 나는 샘플 엔티티를 조롱하고, 당신의 것으로 채택합니다.

public class Bike 
{ 
    public int BikeId; 
    public IList<BikeOwners> BikeOwners; 
    public string BikeName; 
} 

public class Owners 
{ 
    public int OwnerId; 
    public IList<BikeOwners> OwnersBikes; 
    public string OwnerName; 
} 

public class BikeOwners 
{ 
    public int Id; 
    public Owners owner; 
    public Bikes bike; 
} 

지금, 당신은이처럼 NHibernate에 기준을 작성하려고 :

DetachedCriteria crit = DetachedCriteria.For<Bikes>() 
    .CreateCriteria("BikeOwners") //from Bikes class 
    .CreateCriteria("owner") // from BikeOwners class 
    .Add(Expression.Eq("OwnerId", _OwnerId)); //from Owners class 

분명히, 당신은 당신의 엔티티와 이름을 수정해야합니다.

+0

고마워요. 조금 비틀 렸지만 작동했습니다! – LocustHorde

1

BikeOwners 테이블에 더 많은 열이 없으면 도메인 모델에서 전혀 나타내지 말아야합니다. 자전거와 소유자는 다 - 대 - 다 관계로 매핑되어야합니다. 또한 자전거에 여러 명의 소유자가있을 수 있다는 것이 드문 경우입니다.

+0

제안 된 솔루션에 동의합니다. 나는 그가이 도메인을 예제로 제시했다고 생각하는데, 그 부분을 그냥 무시한다. –