2009-08-27 9 views
4

ORMでこの問題にどのようにアプローチしますか? これは、仮想的な(単純化)の例である:
1 - ニューヨーク
2 - ロンドン
3 - サンフランシスコ
4 - 私が持っているニューオーリンズ.NET - ORMとすべての組み合わせ - ViewModel?

:私は都市のテーブルを持っている

スコアの表: (最初の列に一意の主キー、第二月コード、シティFK第三、第四のスコア(INT))
1 - 1 - - 352 9
2から352 - 2から10

月間はニューヨークとロンドンだけです。

ユーザーインターフェイスでこれをユーザーに提示すると、今月の4つの都市をすべて表示するグリッドが表示されます。サンフランとニューオーリンズの都市には空白(空白)があります。

ORMでこれを行うにはどのような方法が最適ですか?ビジネスオブジェクトを「モデル」フォームに戻し、それを「ビューモデル」フォームに変換しますか? ORMで同様の状況をどのように処理しましたか?私はこれまでADO.NETでSQL文を扱ってきましたが、ORMでこのようなことは一度もしていません。私はアドバイス、ガイダンス、またはアプローチを探しています。

答えて

0

LINQを使用して、ドメインオブジェクトを表示モデルにマップします。 (私は、Entity Frameworkのを使用していますが、技術が良いLINQをサポートしている任意のORMで動作します。)まずPOCOのビューモデルを作成し、それに投影:

var pm = from c in Context.Cities 
     let score = c.Scores.Where(s => s.MonthCode == selectedMonthCode).FirstOrDefault() 
     select new CityScoresPresentation 
     { 
      City = c.Name, 
      Score = score.Score 
     }; 

これはエンティティへのLINQです。 LINQ to SQLも同様に動作します。他のORMのLINQ実装によるYMMV。

ビューをORM対応のタイプにバインドするのではなく、ビューモデルを使用することを強くお勧めします。

2

私たちは、実際にはコマンド・セパレーション(Greg Youngバージョン - Meyerバージョンではありません)のフォームを実践していますので、NHibernate ICriteriaを使用して必要な詳細を選択し、AliasToBeanTransformerを使用して直接注入しますDTOに変換する。

私たちの最も複雑なエンティティでは、実際には、画面が単一の行(別名OLAP)に折りたたまれて表示される必要があるすべての詳細を持つ分離された表があります。このテーブルに対してクエリを直接実行することができます。このクエリは、複雑なエンティティをロードするコストをバイパスします。複雑なエンティティには、画面のニーズよりもはるかに多くの情報が含まれています。

関連する問題