我刚刚遇到了同样的问题,发现以下链接很有帮助:http: //qimata.com/ ?p=1381
为了繁荣,这里是使用 AutoMapper 将数据库实体映射到 DTO 的代码,然后将 Patching 应用于 DTO 对象,然后在保存之前使用 AutoMapper 映射回数据库实体:
[AcceptVerbs("PATCH", "MERGE")]
public virtual async Task<IHttpActionResult> Patch([FromODataUri] int key, Delta<DtoEntity> delta, CancellationToken cancellationToken)
{
Validate(delta.GetEntity());
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var entity = await _genericRepository.FindAsync(cancellationToken, key);
var dto = Mapper.Map<DtoEntity>(entity);
delta.Patch(dto);
Mapper.Map(dto, entity);
await _context.SaveChangesAsync(cancellationToken);
return Updated(dto);
}
值得一提的另一件事是,在将 AutoMapper 与 EntityFramework 一起使用时,请注意导航属性的自动扩展。您可以使用以下ExplicitExpansion
方法禁用扩展:
Mapper.CreateMap<DbEntity, DtoEntity>()
.ForMember(dest => dest.Example, opt => opt.ExplicitExpansion());
Configuration.LazyLoadingEnabled = false;
我还必须在我的 DbContext 构造函数中禁用延迟加载。