未映射的属性:_entityWrapper

时间:2019-03-30 17:58:31

标签: entity-framework-6 asp.net-web-api2 dbcontext automapper-8

找到未映射的成员。在下面查看类型和成员。 添加自定义映射表达式,忽略,添加自定义解析器或修改源/目标类型

对于没有匹配的构造函数,请添加一个无参数ctor,添加可选参数,或映射所有构造函数参数

AutoMapper为您创建了此类型映射,但是无法使用当前配置来映射您的类型。 CustomerDto-> Customer_F18BD0407D7AB3084DFC14364CBC838E797CB114E45768DA5EB22B4A1CC94C26(目标成员列表) WebApiCollection.DTO.CustomerDto-> System.Data.Entity.DynamicProxies.Customer_F18BD0407D7AB3084DFC14364CBC838E797CB114E45768DA5EB22B4A1CC94C26(目标成员列表)

未映射的属性: _entityWrapper

var customerInDb = _dbContext.Customers.SingleOrDefault(p => p.Id == customerDto.Id);                 如果(customerInDb == null)                     返回NotFound();

            customerInDb = Mapper.Map(customerDto, customerInDb);

2 个答案:

答案 0 :(得分:0)

您尝试过吗?

customerInDb = Mapper.Map<Customer>(customerDto);

答案 1 :(得分:0)

当 Dto 和 Entity 类之间的字段不对齐时,就会发生这种情况。例如。我的 Dto 包含两个字段

public class ReworkDto: FullAuditEntity
{
    public string WorkOrderNumber { get; set; }
    public string WorkOrderBarcode { get; set; }
}

这两个字段也在实体类中,但实体类还包含导航属性(ReworkDetails)

[Table("Quality_Rework")]
public class QualityRework : FullAuditEntity
{
    [Required, Column(Order = 8)]
    public virtual string WorkOrderNumber { get; set; }

    [Required, Column(Order = 9)]
    public virtual string WorkOrderBarcode { get; set; }

    public virtual ICollection<QualityReworkDetail> ReworkDetails { get; set; }
}

如果我尝试使用以下代码进行更新,则会出现此帖子的特定错误

private void Update(ReworkDto entityDto)
    {
        try
        {
            var entityToUpdate = DbContext.QualityRework.FirstOrDefault(x => x.Id == entityDto.Id);
            var updateRework = _autoMapper.Map(entityDto, entityToUpdate);
        }
        catch (Exception exc)
        {
            Console.WriteLine(exc);
            throw;
        }
    }

为了避免出现错误,我需要 CreateMap (AutoMapperModule.cs),指示 AutoMapper 在 Dto -> Entity to Ignore() ReworkDetails 字段之间映射时。

CreateMap<domain.DTO.Quality.ReworkDto, infrastructure.Entities.Quality.QualityRework>()
                .ForMember(dest => dest.ReworkDetails, opt => opt.Ignore());