2012-03-02 7 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 
} 

と私はそれをバインドするWinフォームで:私はこれでレジ係をロード

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]なまけ役割のコレクションを初期化する-failed:セッションまたはセッションが閉じられた無HRProject.Model.Cashier.Sitesを、

は、私は多くのそのようなクラスを持っていると私はこれを成し遂げるためにクリーンな方法があります感覚を得る、マッピングのオーバーライドを提供することが、この問題

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

を修正することがわかりました。何か案は?

+0

DisplayMemberとValueMemberとは何ですか? – clearpath

答えて

0

私の経験では、FNH、WinFormsのデータバインディング、および遅延読み込みは難しい組み合わせです。

遅延読み込みが必要な場合は、フォームの有効期限内にセッションを開いたままにする必要があります。

必要がない場合は、オフにすることができます。このためwikiに

.Conventions.Add(DefaultLazy.Never()) 

ゴー"The Simplest Conventions"にセクション、およびその他のリスト:

私はプロジェクト全体のためにこれを行うために見つけた最も簡単な方法は、DefaultLazy規則を使用することです。

はここのWikiからのリストです:

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)でWikiを編集しましたが、残りの部分を保証することはできません。しかし、必要が生じた場合、Intellisenseで適切な名前を見つけ出すことができるはずです。

関連する問題