0

我有一个实体:

public abstract class BaseEntity
{
     public Int16 Id { get; set; }
     public DateTime Timestamp { get; set; }
}

public class Certificate : BaseEntity
{
    public String Name { get; set; }
    public String Authority { get; set; }
    public DateTime RecieveDate { get; set; }
    public String Image { get; set; }
}

我有一个 ViewModel:

public abstract class BaseViewModel
{
    public Int16 Id { get; set; }
    public DateTime Timestamp { get; set; }
}

public class Certificate : BaseViewModel
{
    public String Name { get; set; }
    public String Authority { get; set; }
    public DateTime RecieveDate { get; set; }
    public String Image { get; set; }
}

我需要将 Entity.Certificate 映射到 ViewModel.Certificate (我根本不需要映射 BaseEntity,我想摆脱它)。我有映射器配置文件:

 public class MappingProfile : Profile
 {
    public MappingProfile()
    {
        CreateMap<Storage.Entities.Entities.BaseEntity, ViewModels.ViewModels.BaseViewModel>()
            .Include<Storage.Entities.Entities.Certificate, ViewModels.ViewModels.Certificate>();
        CreateMap<Storage.Entities.Entities.Certificate, ViewModels.ViewModels.Certificate>();
    }
 }

在 ConfigureServices 中注册:

services.AddAutoMapper();

上面提到的所有 3 个类都在不同的项目中(如果有任何意义的话)。

这是控制器构造函数:

    private readonly Storage.Abstractions.Core.IStorage _storage;
    private readonly IMapper _mapper;
    public CertificateController(Storage.Abstractions.Core.IStorage storage, IMapper mapper)
    {
        this._storage = storage;
        this._mapper = mapper;
    }

并获取我将实体映射到 viewModel 的方法:

   IEnumerable<Storage.Entities.Entities.Certificate> certificates = await this._storage.GetRepository<ICertificateRepository>().AllAsync();
   IEnumerable<ViewModels.ViewModels.Certificate>result = _mapper.Map<IEnumerable<Storage.Entities.Entities.Certificate>, IEnumerable<ViewModels.ViewModels.Certificate>>(certificates);

看起来是正确的,对吧?但:

错误映射类型。

映射类型:IEnumerable 1 -> IEnumerable1 System.Collections.Generic.IEnumerable 1[[AlexanderTsema.Storage.Entities.Entities.Certificate, AlexanderTsema.Storage.Entities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> System.Collections.Generic.IEnumerable1[[AlexanderTsema.ViewModels.ViewModels.Certificate, AlexanderTsema.ViewModels, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]

和 Inner Exc:缺少类型映射配置或不支持的映射。

映射类型:证书 -> 证书 AlexanderTsema.Storage.Entities.Entities.Certificate -> AlexanderTsema.ViewModels.ViewModels.Certificate

请指教。

我试图将 Entity.Certificate 映射到 Entity.Certificate 并且它工作正常。

4

1 回答 1

1

我认为您可能缺少的至少是 AutoMapper 可以用来发现配置文件的一种类型或程序集。

services.AddAutoMapper(typeof(MappingProfile));应该做的伎俩。

于 2017-01-29T21:31:38.777 回答