0

현재 NHibernate를 배우고 있으며 웹 컨트롤 (예 : GridView)에 데이터 바인딩하고 싶습니다. 나의 현재의 예에서GridView가 관계를로드하기 위해 NHibernate 프록시를 발생시키지 않습니다

나는 비즈니스 오브젝트 (프로젝트ProjectStatus)에 두 개의 테이블을 매핑 유창함 자 NHibernate를 사용하고 있습니다. 또한 "ProjectStatus"(다 대일) 관계가 있습니다. 프로젝트 클래스의

구조 :

Project.ID 
Project.Name 
Project.ProjectStatus.Name 
Project.ProjectStatus.Description 

의 GridView에 (= "프록시"게으른에) 내가 프로젝트 개체 목록을 결합이의의 GridView이 참조 된 테이블의 부하를 유발하지 않습니다. 결과적으로 필드 이름설명 ProjectStatus의은 GridView 컨트롤에서 제외되었습니다.

데이터 바인딩 된 GridView와 함께 실제 지연로드하는 방법이 있습니까?

미리 감사드립니다.

답변

2

아무 문제없이 작동합니다. 나는 문제가 자식 개체의 속성에 액세스하지 않는 데이터 바인딩 자체에 있다고 생각합니다. 어떻게 ProjectStatus 속성에 바인딩하고 있습니까? 내가 아는 한, 당신은 자식 객체에 직접 바인딩 할 수 없다. OnRowDataBound 이벤트 처리기 또는 Eval을 사용하여 값을 설정해야합니다.

먼저 OnRowDataBound 핸들러를 만들고 DataRow에서 중단합니다. 직접 실행 창에서 e.Row.DataItem을 검사하여 자식 개체가로드되고 있는지 확인하십시오. 그렇다면 문제는 구속력에 달려 있습니다.

+0

OnRowDataBound 이벤트를 중단시키지 않으려면 다음과 같이 자식 객체 속성에 대한 래퍼 속성을 만들 수 있습니다. public string StatusName {get {return ProjectStatus.Name; }} –

+0

감사합니다. Jamie Ide, 네가 옳았다. 아이들을 수동으로 액세스하고 RowDataBound 핸들러의 행에 추가하여 내 문제를 해결했습니다. ADO.NET Entity 개체/프록시가 같은 방식으로 작동하는지 알고 있습니까? 아니면 데이터 바인딩이 더 쉬워 집니까? – motto

+0

@Motto - 불행히도 데이터 바인딩의 제한 사항이므로 개체가 어디서 왔는지는 중요하지 않습니다. 난 당신 RowDataBound없이 귀하의 페이지에 가져 오기 문을 넣고 eval을 사용하여 주위를 해결할 수 있다고 생각합니다. –

2

요청 컨텍스트에 세션을 저장하고 요청이 끝날 때이를 플러시 하시겠습니까? 그렇지 않다면 global.asax.cs의 begin_request 메소드에서 새 세션을 시작하고 요청 컨텍스트에 저장 한 다음 end_request 메소드에서 다시 가져 와서 플러시해야합니다.

+0

데이터 바인딩을 수정 한 후 고마워. 저장소를 사용할 수 있도록 세션을 저장하는 것은 여전히 ​​고통스러운 것처럼 보입니다. 더 쉽게 할 수있는 조언이 있습니까? Thanks – motto

관련 문제