NHibernateセッションからDataGridViewにプルされたオブジェクトをバインドしようとしていますが、問題が発生しています。DataGridViewへのNHibernateプロキシオブジェクトのバインド
私は、コンボボックス列にバインドされているすべての "ルックアップ"項目を取得してオブジェクトを検索します。なんとか、これは依然としてメインオブジェクト上にプロキシの子オブジェクトをもたらします。私はルックアップ項目のマッピングを熱心なフェッチに変更したこともありますが、何とかプロキシを取得します。私はそれらを介して行くように、それはすでにそれを見て、そのキャッシュにそれを持っているため、セッションは、車のメーカーやモデルをデータベースに照会しません
Dim _makes As IList(Of Make) = session.QueryOver(Of Make).List
Dim _models As IList(Of Model) = session.QueryOver(Of Model).List
Dim _cars as IList(of Car) = session.QueryOver(of Car).List
' A car has a .Make and a .Model that are picked from a DGV ComboBox Column
:ここ
は、私は、オブジェクトを取得しています方法です。しかし、これが事実なら、それはどうしてもそれはプロキシオブジェクトですか?
私はプロキシを避けるように見えないので、これらのオブジェクトをDataGridViewにバインドする最良の方法は何か疑問です。
私は、この問題について議論している記事をいくつか見てきました。たとえば、NHibernate proxy causing problems with databindingですが、それは数年前です。その後、NHibernateは大きく変化しました。今、この問題に対する新しい、あるいはより良い解決策がありますか?
ありがとうございます。
この投稿からいくつかの洞察を得た後、私は別の質問を投稿しました。私はまた、問題の簡単な解決策を見つけました - ここでそれを見ることができます:Binding a collection of objects to a ComboboxColumn in a DataGridView
これは意味がありますが、問題を解決していないようです。私はコードを踏んで、これが実行されるのを見てきました。また、単に.Fetch()をやってみました。クエリが実行されても、たとえキャッシュにまだ残っていても、データベースからすべてのデータを再度要求しても、プロキシオブジェクトが生成されます。他のアイデア? – Origin
ありがとうございます。私はNHibernateの部分を誤解していただけでなく、私が読んだいくつかのブログ記事を完全に理解していなかった。私が抱えている問題は、データバインディングの中心にあるようです。私はその赤ちゃんを扱うと、私はそれのNHibernate側をもう一度見てみましょう。 – Origin
ちょうど私の2セントです:) GUIコンポーネント(データグリッド、ドロップダウンなど)でNHibernateマップエンティティを直接使用することはお勧めしません。 N + 1(またはもう一度)を選択したり、さらに悪いシナリオを選択するなどの問題が発生する可能性があります。実行時にISessionオブジェクトが閉じられた場合、例外が発生することがあります。 – cidico