2012-03-02 3 views
1

나는이 질문을 잠시 동안 연기하고 있지만, 지금은 항상 나를 귀찮게하고있다.테이블을 winforms 컨트롤로 올바르게 바인딩하는 방법?

sealed class Repository<T> : IRepository<T> where T :class 
    { 
     public IList<T> Items { get; private set; } 

     public void Load() 
     { 
      Items.Clear(); 
      var session = SessionHelper.GetSession(); 
      session.Clear(); 
      using (var tx = session.BeginTransaction()) 
      { 
       var list = session.Query<T>().ToList(); 

       foreach (var obj in list) 
       { 
        Items.Add((T)session.Merge(obj)); 
       } 

       session.Clear(); 
       tx.Commit(); 
      } 
     } 
//more 
} 

과의 WinForm에서 나는에 바인딩 :

class Cashier 
{ 
    int Id {get; set;} 
    string name{get; set;} 
    IList<Site> Sites {get; set;} 
} 

class Site 
{ 
    int Id{get; set;} 
    string name {get; set;} 
    Cashier Cashier {get; set;} 
} 

나는이에 계산원을로드 - 나는 2 개 클래스 (. 내가 간결 publicvirtual을두고 이러한 클래스는 automapped있다)이 이 같은 BindingSource에 :

cashierBindingSource.DataSource = Cashiers; 

나는 콤보 상자의 데이터 원본으로이 BindingSource에 설정하고 나는 콤보이 제외에 응용 프로그램을 실행하고 클릭 할 때 이온 날 던져 :

초기화 [HRProject.Model.Cashier # 1] 느리게 역할 수집하는 초기화가 실패했습니다 : 세션 또는 세션이 닫혔다없이 HRProject.Model.Cashier.Sites를

은 내가 많은 그런 수업을 나는이 작업을 수행하려면 깨끗한 방법이 느낌을 얻을, 매핑 재정의를 제공하는 것이 그러나이 문제

mapping.HasMany(x => x.Sites).Not.LazyLoad().Cascade.All(); 

를 해결 것으로 나타났다. 어떤 아이디어?

+0

DisplayMember 및 ValueMember 란 무엇입니까? – clearpath

답변

0

제 경험상 FNH, WinForms 데이터 바인딩 및 지연로드는 어려운 조합입니다.

지연로드가 필요한 경우 양식 수명 동안 세션을 열어 두어야합니다.

필요하지 않은 경우 해제 할 수 있습니다. 이것에 대한 위키

.Conventions.Add(DefaultLazy.Never()) 

이동 "The Simplest Conventions"에 섹션, 그리고 다른 사람의 목록 :

나는 전체 프로젝트에 대해이 작업을 수행하기 위해 찾은 가장 쉬운 방법은 DefaultLazy 규칙을 사용하는 것입니다. 위키의 메소드 이름의 일부가 잘못 될 수 있습니다 -

Table.Is(x => x.EntityType.Name + "Table") 
PrimaryKey.Name.Is(x => "ID") 
AutoImport.Never() 
DefaultAccess.Field() 
DefaultCascade.All() 
DefaultLazy.Always() 
DynamicInsert.AlwaysTrue() 
DynamicUpdate.AlwaysTrue() 
OptimisticLock.Is(x => x.Dirty()) 
Cache.Is(x => x.AsReadOnly()) 
ForeignKey.EndsWith("ID") 

경고의 말씀 :

다음은 위키의 목록입니다. 내가 검증 할 수있는 (즉 DefaultCascade와 DefaultLazy) 위키를 편집했지만 나머지는 보증 할 수 없습니다. 그러나 필요한 경우 Intellisense를 사용하여 적절한 이름을 알아낼 수 있어야합니다.

관련 문제