一般的には類似した質問がありますが、答えは見つかりませんでした。このコードブロックは、私の現在のシナリオを示すべきである:AutoMapperを使用して既存のネストされたクラスインスタンスを再利用
class Entity
{
Guid EntityId { get; set; }
string EntityName { get; set; }
NestedEntity Nested { get; set; }
// more domain methods
}
class NestedEntity
{
Guid NestedId { get; set; }
string NestedName { get; set; }
string NestedDescription { get; set; }
// more domain methods
}
class EntityDto
{
Guid EntityId { get; set; }
string EntityName { get; set; }
NestedEntityDto Nested { get; set; }
}
class NestedEntityDto
{
Guid NestedId { get; set; }
string NestedName { get; set; }
string NestedDescription { get; set; }
}
class MyMappingProfile : Profile
{
CreateMap<Entity, EntityDto>();
CreateMap<NestedEntity, NestedEntityDto>();
}
// that profile gets added to configuration, not shown here
// IMapper is registered and injected as a dependency, not shown here
EntityDto entityDto = GrabFromEntityFrameworkDbContext();
Entity entity = GrabChangesByUser();
mapper.Map<Entity, EntityDto>(entity, entityDto);
だから、これは既存のアイテムを更新についてです、すでにユーザーが行った変更で、DBに持続しました。 EntityDto
インスタンスはEntity Frameworkから取得され、DbContextはEntityDto
とNestedEntityDto
の両方の追跡を開始します。代わりにEntity
インスタンスには、ユーザーによる変更が含まれています。 MVC/API PUTアクションを使用します。
mapper.Map<Entity, EntityDto>(entity, entityDto);
深くEntityDto
の既存のインスタンスにEntity
をクローニングするための迅速な(開発者)の方法を表します。
第1レベルのエンティティのインスタンスが実際に再利用されますが(entityDto
)、ネストされたエンティティインスタンスでは同じことは起こりません。現在のテストでは、NestedEntityDto
という新しいインスタンスが作成され、EntityDto
に割り当てられています。これは、EFチェンジトラッキングを壊します。これは、同じIDで2つのネストしたエンティティインスタンスが存在するためです。
So:AutoMapperを最初のレベルの宛先オブジェクトだけでなく、ネストされたプロパティこれを達成する方法はありますか?おかげで、すべての
環境:ASP.NETコア1.0、EFコア1.0、AutoMapper 5.0.2、C#6
あなたはジミーはちょうど[AutomapperとASP.NETに関する記事を書いていますあなたのための幸運なカスタム値リゾルバ –
を記述する必要がありコア1](https://lostechies.com/jimmybogard/2016/07/20/integrating-automapper-with-asp-net-core-di/) –
フィードバックに感謝します。はい、私はそのポストとネットコアの統合は問題ではないことを認識している、それは働いている。あなたの価値リゾルバのアイデアについてもっと詳しく説明できますか?すでにフィールドを別のフィールドに変換するために1つを使用しています。しかし、どのようにしてトップレベルの下にある既存のインスタンスを再利用できるかはわかりません。 – superjos