データバインドされた DataGridView で外部キー ルックアップを表示できるようにする WinForms アプリケーション (.Net 3.5、WPF なし) を開発しています。
このような関係の例として、OrderLines のテーブルがあります。Orderlines には Products に対する外部キー関係があり、Products には ProductTypes に対する外部キー関係があります。
各行がオーダーラインを表し、ラインの製品と製品タイプを表示する、データバインドされた DataGridView が必要です。
ユーザーは、注文行をグリッドに直接追加または編集し、comboBoxColumn から注文行の製品を選択できます。これにより、producttype 列が更新され、選択した製品の producttype が同じ行に表示されます。
私がこれまでに見つけた最適な方法は、オーダーラインを表すドメイン オブジェクトを導入し、DataGridView をこれらのオーダーラインのコレクションにバインドすることです。次に、製品と製品タイプを公開するプロパティを orderline オブジェクトに追加し、関連する notifypropertychanged イベントを発生させて、すべてを最新の状態に保ちます。次に、orderline リポジトリで、この orderline オブジェクトとデータベース内の 3 つのテーブルの間のマッピングを関連付けることができます。
これはデータバインディングの側面では機能しますが、リポジトリ内のすべての OR マッピングをコードに渡さなければならないのは良くないようです。nHibernate はこの接続に役立つと思っていましたが、すべての外部キーを介したマッピングに苦労しています - それらは正常に動作しているようです (オーダーラインの製品の外部キー検索は、外部キーに基づいて正しい製品オブジェクトを作成します)。データバインドを実行しようとしましたが、データバインドされた ID 列を取得して製品または製品タイプ オブジェクトを更新できません。
私の一般的なアプローチは正しい球場でもありますか? もしそうなら、マッピングの問題に対する良い解決策は何ですか?
または、考慮していない外部キー検索を含む行をデータバインドするためのより良い解決策はありますか?