2016-10-19 3 views
1

(What to do when model is exactly the same as viewmodelを拡張してコーディングの具体的な問い合わせを行います....ドメインモデルとビューモデルがまったく同じ場合に最適なマッピングですか?

...言い換えれば、ドメインモデルに必要なビューモデルと同じプロパティが含まれている場合、最適なマッピングソリューションは何ですか?

ドメインモデルが複数のナビゲーションプロパティを持つ傾向にあるため、何らかの理由でこれが予想より頻繁に発生します。ほぼ「それはすべて」という見方で終わります。

ダイレクトマッピングを実行するオートマトンのショートカット、継承戦略、または多分Linq式はありますか?

私は素早く奇妙なことが起こり、Automapperの「命名規則によるマッピング」に複雑なタイプの特に重大な制限があることを少し実験しました。

データ注釈の必要性を満たす以外は、ビューでドメインモデルを使用し、ビューで検証を行うことに傾いています。したがって、マッピング方法がないと、私が本当に欲しくない「アンチパターン」でコーディングに向かうことになります。

答えて

1

は、それはあなたのモデルの内容に依存していますが、ターゲット型に戻ってそれを変換し、その後JSONにあなたのオブジェクトを変換して試すことができます:

public class SourceEntity 
    { 
     public string Name { get; set; } 
     public DateTime StartDate { get; set; } 
    } 
    public class TargetEntity 
    { 
     public string Name { get; set; } 
     public DateTime StartDate { get; set; } 
    } 
    public void Sample() 
    { 
     SourceEntity sourceEntity = new SourceEntity { Name = "Test name", StartDate = DateTime.Now.AddDays(-3) }; 
     TargetEntity targetEntity = JObject.FromObject(sourceEntity).ToObject<TargetEntity>(); 
    } 

あなたは、あなたのプロジェクトにNewtonsoft.Jsonを追加する必要があります。

これにより、複雑なプロパティと子コレクションも変換されますが、ターゲットタイプのインターフェイスや派生クラスとは闘うことになります。

+0

素敵なアイデア...私はNewtonsoft.JsonをAjaxの呼び出しで見て、代わりに.serialiseArrayメソッドを使用して終了しました。 .net Jsonシリアライザの限界に驚いた。 Newtonsoftは大規模なクラス構造を「スウィロー」するのだろうか? –

+0

Newtonsoftには限界がありますが、私の経験上、オブジェクトのサイズはその1つではありません。 "large"の大きさはどれくらいですか?私たちはJsonを何百ものフィールドを持つ構造体に使用しており、これまでのところパフォーマンスの問題は見られませんでした。 – bib1257

+0

ところで、これは「類似の」モデルも変換します。ターゲットモデルに存在しないソースモデル内のフィールドは無視され、ビューモデルはドメインモデルよりもデータ量が少なくなります – bib1257

関連する問題