NH 3.1을 사용하는 프로젝트가 있고 여기까지 모든 것에 대해 QueryOver 구문을 사용하고 있습니다.NHibernate QueryOver 값 컬렉션
이 프로젝트의 한 측면은 읽기 전용 액세스 권한이 있고 완전히 다른 DBMS (Oracle VS MSSQL)를 사용하는 조직 전체 데이터베이스에 존재합니다. 그래서 대신 Iset<Bar>
을 필요없이 해당 개체 (바) 다 대다 표준을 사용하여 테이블
FooBars
FooID int not null PK
BarID int not null PK
그리고 내 도메인 객체에 내 개체 (FOOS)에서 참조를 저장하는 대신 수동으로 매핑하는 ISet<int> BarIDs
있다 테이블에 FooBars
. 이것은 NH가 불가능한 일을 시도하지 못하도록하고 Bars 테이블까지 모든 단계에 참여합니다 (BarRepository.Get()을 사용하여 나중에 막대의 세부 정보를 검색 할 수 있습니다. 필요하다면이 경우 I wouldn 왜냐하면 반환 된 객체의 목록을 필터링하기 위해 ID가 필요하기 때문입니다.)
주어진 어떻게 BarIDs
에있는 요소가 포함되어 있습니다 SelectedBars
?
...FROM foos INNER JOIN foobars on foo.fooID = foobars.fooID WHERE barID IN (...)
그래, 나는 2 년 후에 무언가가 바뀌었을 것이라는 헛된 희망을 가지고 있었다.게으른 로딩은주의를 기울이지 않으면 데이터베이스를 공격하려고 시도하고 MSSQL 데이터베이스의 테이블을 Oracle 데이터베이스에 조인하려고 시도하기 때문에 작동하지 않습니다. 하지만 난 유일한 속성으로 단지 ID와 래퍼 클래스 'DummyBar'쓸 수 있습니다 ... 그냥 automapper 그것을 무시하도록해야합니다. –
이 두 달 후로 돌아와 ... 나는 BarProxy 클래스를 작성하려고했지만 그 다음에 "이 술집과 관계가있는 정보를 찾는다"라는 쿼리가 나오자 SQL이 BarProxy 테이블에 조인하려고했습니다 a) 존재하지 않았고 b) 그것이 존재했다하더라도 비어있을 수 있습니다 (실제 데이터는 외부 데이터베이스에 있음). 그래서 우리는 지금 HQL이나 원시 SQL을 시도 할 것입니다. –