2011-03-03 2 views
0

을 가져올 때 나는 다음 클래스를이로드되지NHibernate에 집계 목록

public class Room 
{ 
    public virtual Guid Id { get; set } 
    public virtual string Name { get; set } 
    public virtual Guid LocId { get; set } 
    public virtual Location Loc { get; set; } 
} 

내가 트랜잭션을 시작하고 새로운 엔티티에 대한 Session.Save를 호출하고 올바르게 데이터베이스에 기록하지만, 나는 즉시 (GetList를 호출하는 경우) 새로운 엔터티를 제외한 모든 엔터티에 Loc 속성이 할당 된 목록이 반환되지만 Save를 호출하기 전에 Loc을 설정하면이 엔터티가 새 엔터티에 할당됩니다. Flush()는 문제를 해결하지 못합니다. 나는 무엇을 놓치고, 나는 그것을 세울 위치를 얻지 않기를 원할 것이다.

+0

LocId와 위치를 모두 매핑하는 이유는 무엇입니까? – Vadim

+0

위치가 원래지도의 일부가 아닙니다. GetList가 호출 될 때 해당 정보가 반환되도록 추가했습니다. 나는 현재 모든 사용법을 대체 할 시간이 없으므로 LocId를 제거하지 않았습니다. – Thad

+0

지정하지 않은 경우 위치를 참조하도록 위치를 설정하는 것은 정확히 무엇입니까? 데이터베이스에서 흑 마술은 무엇입니까? 수동으로 LocId를 설정합니까? 그리고 그것은 데이터베이스의 동일한 열에 매핑됩니까? 이 엔터티에 대한 매핑 파일을 게시하십시오. – jishi

답변

0

매핑 모두 LocLocId은 NHibernate의 잘못된 사용법입니다.

위치를 할당하려면 room.Location = session.Load<Location>(locId)을 사용하십시오.

0

Session.Evict 함수를 사용하여 세션에서 개체를 제거 할 수 있습니다. 그렇지 않으면 지정된 ID에 대한 세션 개체를로드합니다. 그러나 매핑에서 LocId 속성을 제거하는 것이 좋습니다.

+0

Evict는 "세션에 가능한 보안 액세스가 가능합니다." – Thad

+0

@ 자신의 코드를 보지 않고도 예외가 발생하는 이유는 무엇입니까? 아마 당신은 업데이트를하기 전에 퇴거하고 있습니까? – Vadim

+0

저장 후 Session.Refresh (obj)를 호출 할 수 있으며 문제가 해결 된 것으로 보입니다. 이제 LocId를 제거 할 시간을 가지십시오. – Thad