나는 두 개의 연관된 비즈니스 객체 -A와 B를 가지고있다. B.Id a와의 연관은 (A-> B) many-to-one이다. A의 외래 키 (A는 DB에 A.B_id가 있음).NHibernate - 전체 객체를 지연로드하지 않고 연관된 객체의 ID에 접근한다.
나는 Lazy = true를 사용하고 있으며 대부분의 문제점 ( )을 해결했습니다. A 's ToString에서는 A.B.Id를 인쇄하려고합니다. 더 이상 DB를 사용하지 않고 가져 가야합니다. A.B에 액세스하면 프록시가 활성화되고 이는 열린 세션의 컨텍스트가 아니기 때문에 예외를 throw합니다.
쉽지 만 못생긴 해결책은 A.B_id 속성을 갖는 것입니다. 그러나 그것은 우리가 처음에 피하려고했던 것들의 일부입니다. 이 작업을 수행하는 "유기적 인"방법이 있습니까? :) 감사합니다!
업데이트 : 그냥 캐싱 및 Session.Get 대 Session.Load에 대해 읽었습니다. 그 전에는 객체가 존재하지 않으면 (Session.Load), 다른 객체가 null 객체 (Session.Get)를 반환하면 예외가 throw됩니다. here 캐싱에 대해 읽은 후에는 Session.Load가 객체에 대한 프록시를 반환하고 ID 이외의 속성에 액세스 할 때 지연 연결 만 가져옵니다. 이는 연결에서 필요한 것과 매우 비슷합니다. 지금은 별도의 객체 ID를 추가했습니다. (ABId를 사용하여 ABId 대신 A.B_Id로 액세스 할 수 있도록 A에 B_Id를 추가했습니다.)
왜이 작업을 수행 하시겠습니까? – Paco
내가 말했듯이, A의 ToString()에서 로그 인쇄 등을 위해서만 사용됩니다. B의 다른 필드는 필요하지 않습니다. –