我已經在這裏檢查了SO & Google對於類似的問題一般,但無法找到答案。這個代碼塊應該顯示我目前的情況:用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
實例取自實體框架,其中DbContext將開始跟蹤EntityDto
和NestedEntityDto
。而Entity
實例則包含用戶所做的更改,例如通過MVC/API PUT操作。
mapper.Map<Entity, EntityDto>(entity, entityDto);
代表了一種快速(開發人員)的方式來將Entity
深入克隆到現有的EntityDto
實例中。
問題是第一級實體的實例實際上被重新使用(entityDto
),但嵌套實體實例不會發生同樣的情況。從我目前的測試中,創建了一個NestedEntityDto
的新實例並將其分配給EntityDto
。這EFlus更改跟蹤,因爲現在有兩個嵌套的實體實例周圍具有相同的ID,等等
所以:我如何使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/) –
感謝您的反饋。是的,我知道這個帖子和Net Core的集成不是一個問題,這是行得通的。你能詳細闡述你的價值解析器的想法嗎?我們已經使用一個將某個字段轉換爲另一個字段。但我看不出它是如何讓您重新使用頂層以下的現有實例的。 – superjos