【问题标题】:AutoMapperConfigurationException: AutoMapper throwing exception without showing property nameAutoMapperConfigurationException:AutoMapper 抛出异常而不显示属性名称
【发布时间】:2016-08-18 06:02:28
【问题描述】:

我正在使用 Asp.Net Web API 创建 POC。为了将一种对象类型映射到另一种对象类型,我使用 AutoMapper(v5.1.1)。以下是用于映射的类型:

//Entity
public class Goal : IVersionedEntity
    {
        public virtual int GoalId { get; set; }
        public virtual string Title { get; set; }
        public virtual string Description { get; set; }
        public virtual DateTime StartDate { get; set; }
        public virtual DateTime EndDate { get; set; }
        public virtual string Reward { get; set; }
        public virtual DateTime? DisabledDate { get; set; }
        public virtual byte[] Version { get; set; }
        public virtual User User { get; set; }
        public virtual ICollection<Schedule> Schedules { get; set; }
    }
//Model
public class Goal
    {
        private List<Link> _links;
        public int GoalId { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public DateTime? StartDate { get; set; }
        public DateTime? EndDate { get; set; }
        //public Status Status { get; set; }
        public string Reward { get; set; }
        public DateTime? DisabledDate { get; set; }
        public User User { get; set; }
        public ICollection<Schedule> Schedules { get; set; }
        public List<Link> Links
        {
            get { return _links ?? (_links = new List<Link>()); }
            set { _links = value; }
        }
        public void AddLink(Link link)
        {
            _links.Add(link);
        }

    }

我将目标实体映射到目标模型类型对象,如下所示:

public async System.Threading.Tasks.Task Configure()
        {
            Mapper.Initialize(cfg => cfg.CreateMap<Data.Entities.Goal, Models.Goal>()
            .ForMember(m => m.Links, i => i.Ignore()));
        }

这里是“App_Start”中的“AutoMapperConfigurator”类:

public void Configure(IEnumerable<IAutoMapperTypeConfigurator> autoMapperTypeConfigurations)
        {
            autoMapperTypeConfigurations.ToList().ForEach(m => m.Configure());
            Mapper.AssertConfigurationIsValid();
        }

但它抛出以下异常:

TestApp.Web.Api.Models.Goal 上的以下属性不能 mapped:添加自定义映射表达式,忽略,添加自定义 解析器,或修改目标类型 TestApp.Web.Api.Models.Goal。 上下文:从类型 TestApp.Data.Entities.Goal 映射到 TestApp.Web.Api.Models.Goal 类型异常 'AutoMapper.AutoMapperConfigurationException' 被抛出。

看看它没有显示哪个属性没有被映射。 有关此问题的任何帮助。

【问题讨论】:

    标签: asp.net-web-api automapper


    【解决方案1】:

    在花了几个小时之后,我的最终发现如下:

    1. 您必须使所有实体模型和服务模型映射正确,才能使其正常工作。即使失败,也会抛出上述异常。如果您的复杂类型映射不正确,您将收到上述错误。
    2. 就我而言,我错过了如何使用AutoMapper 配置Complex Type
    3. 要配置Complex Type,如果不需要,可以添加.ForMember(m =&gt; m.Property, i =&gt; i.Ignore())以忽略复杂类型映射,或者为嵌套映射添加.ForMember(m =&gt; m.Property, i =&gt; i.MapFrom(j =&gt; Mapper.Map&lt;Entity,ServiceModel&gt;(j.Property)))(参考:http://www.softwarerockstar.com/2011/05/complex-object-mapping-using-automapper/),或者如果在运行期间有特定要求,请使用CustomMapping映射

    【讨论】:

    • 您的任何一个类中都没有Complex 类型或Property 属性或字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 2012-01-24
    • 2015-03-31
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    相关资源
    最近更新 更多