2017-07-18 6 views
0

ドメインへのデータ転送ビューにはDtoを使用し、マッピングにオートマッペを使用しています。 私の問題は、存在しないプロパティですが、ドメインにマッピングする前に設定する必要があるということです。 私はLinqクエリを使用して、マッピングメソッドの前後でdbから外部データを取得しようとしましたが、linqクエリでエラーが発生しました。オートマトンのドメインに存在しない外部データを設定するには

サンプル

以下FooDto

public class FooDto 
{ 
public int MyProperty1 {get;set;} 
} 

FooDomain

public class Foo 
{ 
public int MyProperty1 {get;set;} 
public int MyProperty2 {get;set;} 
public int Foo2ID {get;set;} 
public virtual Foo2 Foo2 {get;set;} 
} 

Foo2Domain

public class Foo2 
{ 
public int ID {get;set;} 
public int MyProperty1 {get;set;} 
} 

** AutoMapper *

Mapper.Initialize(x => 
{ 
x.CreateMap<FooDto, Foo>().BeforeMap(
(src, dest) =>dest.MyProperty2 = dest.Foo2.MyProperty1); 
} 

私はマッピングを使用してFoo.MyProperty2にFoo2.MyProperty1を設定します。

+0

一つは、私が持っている疑問の答えを修正し

右申し訳ありませんか?私はdest.Foo2がnull参照例外をスローすると思います。それともそうですか? – Woot

+0

@Wootあなたは正しいです。どうすれば別のテーブルからlinqクエリでデータを取得できますか? –

答えて

1

私の前提が間違っている場合は、この回答を編集する必要があります。私が作っている前提は、ソースオブジェクトに正しいデータがあるということです。何このコードはありませんが、私はあなたを与えるとき、それはAutoMapperを伝えている

Mapper.Initialize(x => 
{ 
    x.CreateMap<FooDto, Foo>() 
    .ForMember(dest => dest.MyProperty2, opt => opt.MapFrom(src => src.MyProperty1)) 
    .ForMember(dest => dest.Foo2.MyProperty1, opt => opt.MapFrom(src => src.MyProperty1)); 
} 

:あなたのソースオブジェクトのMyProperty2はそうあなたがする必要があるだろう、すべてがこれをマッピングしない先のオブジェクトに設定することができますようにあなたのサンプルに基づいて、それが見えます型FooDtoのオブジェクトであり、型Fooのオブジェクトを要求しています。宛先オブジェクトのプロパティ 'Foo2.MyProperty1'と 'MyProperty2'に対して、オプションのMapFromメソッドを使用します。ソースObjectに移動し、MyProperty1を取得し、その値をMyProperty2とFoo2.MyProperty1の宛先オブジェクトに割り当てます。

これはあなたを解決すると思います。あなたは.BeforeMapがDEST DTOのnullではないん場合、私は、

+0

srcオブジェクトはFooDtoのエンティティではないので、ソースオブジェクトはFoo2プロパティを持っていません –

関連する問題