2010-01-16 9 views
1

나는 NHibernate 및 Session과 약간 혼돈 스럽다. 내가 알기로, 나는 "가능한 한 빨리"세션을 사용하기로되어 있는데, 이는 두 개의 서로 다른 상호 작용이 그들 자신의 세션을 얻는다는 것을 의미한다.NHibernate : GUI 변경을 저장하는 가장 좋은 순간

UI 상호 작용의 경우 어떻게해야합니까? DB에 저장하고 싶습니다. 트리보기가 일부 항목을 나열하고 비즈니스 개체의 IsExpanded 속성에 바인딩되는 간단한 예제가 있습니다. (나도 알아, 나쁜 습관,하지만 내 접근은 괜찮습니다) ...

질문은 지금입니다. 언제 변경 사항을 저장합니까? 현재 창을 닫으면 수동으로 플러시됩니다. 제대로 보이지 않습니다. 나는 부동산이 바뀔 때마다 내릴 수 있었지만, 그것은 과잉 살상이었다고 생각합니다.

이런 종류의 문제에 대한 패턴이나 요령이 있습니까? "바로 그 순간에 깔끔한까지 저장 GUI의 정보를 정기적으로"의 종류 ... 여기

더 나은 이해를위한 몇 가지 코드 : 팁

private static PjmDbController _d; 
    private static IList<Topic> _allItems; 

    private static void TopicStoresChildStatesExpandedOrNot() 
    { 
     var w = new Window(); 
     _d = new PjmDbController(); 
     _allItems = _d.GetAllRoots(); 
     w.Content = new PjmTreeView<Topic>() {ItemsSource = _allItems}; 
     w.Show(); 
     w.Closed += new EventHandler(w_Closed); 
    } 

    static void w_Closed(object sender, EventArgs e) 
    { 
     _d.Session.Flush(); 
    } 

감사합니다, 크리스

PS : 정적

답변

1

이는 응용 프로그램의 작업 단위 (UOW)의 범위에 전적으로 달려 있습니다. NHibernate의 모범 사례는 세션을 작업 단위로 취급하는 것이다. 폼을 열고 트리를 조작하고 폼을 닫으면 폼이 닫힐 때 세션을 플러시하는 것이 합당합니다. 그러나 세션을 플러시하지 않고 트랜잭션 내에서 변경 사항을 유지합니다. This answer은 세션 관리에 대한 좋은 조언입니다.

2

사용자가 일반적으로 저장 작업을 선택할 때 (예 : '변경 사항 저장'버튼을 클릭하거나 양식을 종료 할 때 저장 확인) 연결해야합니다.

사용자가 개입하지 않고 라이브 지속성을 원할 경우 (예 : 게임에 상태를 저장하는 등) 시간 대기열을 사용하는 것이 하나의 패턴이므로 변경 작업에서 마지막으로 저장 한 시간은 X 초 전이었습니다. 개체를 유지하십시오. 볼륨을 기준으로 매 변경 사항이 과도 할 수 있습니다.

관련 문제