2017-11-30 12 views
-1

DTOオブジェクトをエンティティオブジェクトにマッピングする必要があります.1つのDTOオブジェクトを1つのEntityオブジェクトにマッピングするときに、DTOオブジェクトを1対多のリレーションシップを持つEntityオブジェクトにマッピングします。良い。AutoMapperのネストされたListオブジェクトが正しくマッピングされない

エンティティ - 私のDTOは以下の通りです

public class EntityClass 
{ 

    [Key] 
    public int Id { get; set; } 

    public decimal MonthlyPricing { get; set; } 

    public virtual IEnumerable<DynamicField> DynamicFields { get; set; } 
} 


public class DynamicField 
{ 

    public int Id { get; set; } 
    [ForeignKey("Service")] 
    public int ServiceId { get; set; } 

    public virtual Service Service { get; set; } 
} 

public class DTO_Object 
{ 

    public int Id { get; set; } 

    [Required] 
    public decimal MonthlyPricing { get; set; } 

    public IEnumerable<DynamicFieldForm> DynamicFields { get; set; } 
} 

public class DynamicFieldForm 
{ 

    public int Id { get; set; } 

    public int ServiceId { get; set; } 
} 

私のマッピングは以下の通りです、

var config = new MapperConfiguration(cfg => cfg.CreateMap<DTO_Object, 
EntityClass>().ForMember(s => s.DynamicFields,o => o.MapFrom(s => 
s.DynamicFields.Select(m => m.Id)))); 

IMapper imapper = config.CreateMapper(); 

var service = imapper.Map<DTO_Object, EntityClass>(sourse); 
+0

MapperConfigurationのAddServiceFormとは何ですか? –

+0

最新バージョンを使用している場合は、CreateMissingTypeMapsをfalseに設定します。 –

+0

AddServiceFormはEntityオブジェクトにマップするために必要なDTOオブジェクトです –

答えて

0

自動マッパーは良い習慣ではありません!クラスモデルにカプセル化されている/モデル化されているデータをリンクするためにDBContextを手動でビルドする方がよいでしょう。

再び、それは手動で あなたエンティティコンテキストを書くために優れている理由は、Webリソース上でこれをチェックアウトすることができ非常に 悪い癖ですAutoMapperを使用しないでください手動でエンティティのコンテキストを構築します。

エンティティデータクラスを生成するには、データベースからコードファーストを実行し、モデルを作成するときにEntity DataContextも同時に作成し、正しいマッピングで作成します(モデルの追加、何かを削除する、編集する)。

P.S.たとえば、エンタープライズアプリケーション(WebAPIまたはWebバックエンド)のために何かを構築している場合、私は自動マッピングを使用しません。私はすべて自分でコーディングしています。

+0

はい、私はあなたのポイントを得ました。本当にありがとうございます。 私のシナリオでは、私はautoMapperを使う必要があります:/ –

関連する問題