自动映射:错误映射类型。映射类型:IEnumerable`1 - > IEnumerable`1

时间:2017-08-03 11:47:53

标签: c# entity-framework asp.net-web-api automapper

我正在尝试将模型映射到视图,但是当我尝试显示所有元素时,我收到上述错误,因为Automapper并不认识我认为的IEnumerable。当我尝试将FixedAssets映射到FixedAssetsView和FixedAssetsView到FixedAssets时,我收到错误。

以下是我要映射的对象:

FixedAssets

public class FixedAssets : IEntityBase
{
    public int ID { get; set; }
    public string name { get; set; }
    public virtual ICollection<Category> category { get; set; }
    public string serialNo { get; set; }
    public string provider { get; set; 
    public DateTime acquisitionDate { get; set; }
    public DateTime warrantyEnd { get; set; }
    public int inventoryNo { get; set; }
    public string allocationStatus { get; set; }
    public string owner { get; set;  }
    public DateTime allocationDate { get; set; }
    public string serviceStatus { get; set; }
    public string serviceResolution { get; set; }

    public FixedAssets()
    {
        this.category = new HashSet<Category>();
    }
}

FixedAssetsView

public class FixedAssetsView
{
    public int ID { get; set; }
    public string name { get; set; }
    public virtual ICollection<CategoryView> category { get; set; }
    public string serialNo { get; set; }
    public string provider { get; set; }
    public DateTime acquisitionDate { get; set; }
    public DateTime warrantyEnd { get; set; }
    public int inventoryNo { get; set; }
    public string allocationStatus { get; set; }
    public string owner { get; set; }
    public DateTime allocationDate { get; set; }
    public string serviceStatus { get; set; }
    public string serviceResolution { get; set; }
}

分类

public class Category : IEntityBase
{
    public int ID { get; set; }
    public string categoryName { get; set; }
    public virtual ICollection<FixedAssets> fixedasset { get; set; }

    public Category()
    {
        this.fixedasset = new HashSet<FixedAssets>();
    }
}

类别查看

public class CategoryView
{
    public int ID { get; set; }
    public string categoryName { get; set; }

    public virtual ICollection<FixedAssetsView> fixedasset { get; set; }
}

自动配置配置

Mapper.Initialize(x =>
        {
            x.CreateMap<FixedAssets, FixedAssetsView>();
            x.CreateMap<FixedAssetsView, FixedAssets>();

            x.CreateMap<Category, CategoryView>();
            x.CreateMap<CategoryView, Category>();

        });

2 个答案:

答案 0 :(得分:0)

当您的映射出现问题时,会发生此错误。 原因隐藏在仅显示以下内容的异常消息中:

  

错误映射类型。映射类型:IEnumerable 1 -> IEnumerable 1

要找到原因,请尝试使AutoMapper仅映射集合中的一项。

如果收到异常,则异常消息可能包含对错误原因的更好解释。

答案 1 :(得分:-1)

我相信你需要在Mapper初始化中使用.ForMember。

例如:

Mapper.CreateMap<IEnumerable<Source>, IEnumerable<Target>>()
.ForMember(f => f, mp => mp.MapFrom(
                                mfrom => mfrom.Select(s => AutoMapper.Mapper.Map(s, new Target())
                            )
          );