【问题标题】:AutoMapperMappingException: Missing type map configuration or unsupported mapping, Mapping List of TypesAutoMapperMappingException:缺少类型映射配置或不支持的映射,映射类型列表
【发布时间】:2017-05-01 21:05:21
【问题描述】:

我有以下代码:

我的项目结构是这样的:

我的课程(与此错误相关)

SizeEntity.cs

namespace DataObjects.EntityFramework
{
    public class SizeEntity
    {
        public int Id { get; set; }
        public string SizeName { get; set; }
    }
}

Size.cs(关于业务对象类库)

namespace BusinessObjects
{

    // Product business object
    // ** Enterprise Design Pattern: Domain Model, Identity Field, Foreign key mapping

    public class Size : BusinessObject
    {
        // ** Enterprise Design Pattern: Identity field pattern
        public Size()
        {
            // establish business rules
            AddRule(new ValidateRequired("SizeName"));
            AddRule(new ValidateLength("SizeName", 1, 3));
        }

        public int Id { get; set; }
        public string SizeName { get; set; }

    }
}

SizeDao.cs

public class SizeDao : ISizeDao
    {
        /// <summary>
        /// Constructor to initialize AutoMapper
        /// </summary>
        static SizeDao()
        {
            Mapper.Initialize(cfg => cfg.CreateMap<SizeEntity, Size>());
            Mapper.Initialize(cfg => cfg.CreateMap<List<SizeEntity>, List<Size>>());
        }

        /// <summary>
        /// Inserts size into database
        /// </summary>
        /// <param name="size"></param>
        public void InsertSize(Size size)
        {
            using (var context = new ExamContext())
            {
                var entity = Mapper.Map<Size, SizeEntity>(size);

                context.Sizes.Add(entity);
                context.SaveChanges();

                // update business object with new id
                size.Id = entity.Id;
            }
        }

        /// <summary>
        /// Gets all size from database
        /// </summary>
        /// <returns>Returns a list of Sizes</returns>
        public List<Size> GetSizes()
        {
            using (var context = new ExamContext())
            {
                var sizes = context.Sizes.ToList();
                return Mapper.Map<List<SizeEntity>, List<Size>>(sizes);
            }
        }
    }

我在这段代码的最后一行遇到映射错误。

return Mapper.Map, List>(大小);

我在这里错过了什么?

错误信息在标题中: AutoMapperMappingException:缺少类型映射配置或不支持的映射,类型映射列表

更新 1:

我删除了该行建议,但仍然得到: 缺少类型映射配置或不支持的映射。

Mapping types:
SizeEntity -> Size
DataObjects.EntityFramework.SizeEntity -> BusinessObjects.Size

【问题讨论】:

  • 请提供错误信息
  • 错误在标题中,DTO 和实体不在同一个程序集中:
  • 不,错误不在标题中,您省略了类型名称。
  • 请参阅更新 1 以了解整个错误消息
  • 对一个完全有效的问题感到羞耻

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


【解决方案1】:

首先,您应该删除指定对象List 的映射的初始化,您只需要定义与基础对象的映射。当您调用 Map 方法时,该初始化将导致空结果。

static SizeDao()
{
    Mapper.Initialize(cfg => cfg.CreateMap<SizeEntity, Size>());

    // This is not needed.
    // Mapper.Initialize(cfg => cfg.CreateMap<List<SizeEntity>, List<Size>>());
}

另一件事,正如@CodeCaster 所建议的那样,不要将映射定义放在静态构造函数中,而是,例如,在整个应用程序的入口点中,并在调用 Map 之前验证这些行是否被调用方法。

【讨论】:

  • 请详细说明,因为它仍然无法与您的更正一起使用
【解决方案2】:

因为 Automapper 没有工作,所以我不得不做以下事情:

 /// <summary>
        /// Gets all size from database
        /// </summary>
        /// <returns>Returns a list of Sizes</returns>
        public List<Size> GetSizes()
        {
            using (var context = new ExamContext())
            {
                var sizes = context.SizeEntities.ToList();

                //Convert SizeEntities list to Size (Business Objects) list
                var targetList = sizes
                  .Select(x => new Size() { Id = x.Id, SizeName =  x.SizeName})
                  .ToList();

                return targetList;
                //return Mapper.Map<List<SizeEntity>, List<Size>>(sizes);
            } 
        }

【讨论】:

    猜你喜欢
    • 2016-11-26
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 2019-03-01
    • 2017-04-16
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多