繁体   English   中英

自动映射器子实体未映射

[英]Automapper child entities not mapping

我正在尝试映射包括默认子实体的父实体。

因此,我有一个promotion对象,其中包含localisedPromotion对象的集合

我想设置一个特定的localisedPromotion并将其设置为我的defaultLocalisedPromotion

在我的配置中,我有:

config.CreateMap<LocalisedPromotion, LocalisedPromotionViewModel>()
    .ForMember(dest => dest.LocalisedPromotionId, o => o.MapFrom(src => src.Id));

config.CreateMap<Promotion, PromotionViewModel>()
    .ForMember(dest => dest.DefaultLocalisedPromotion,
               o => o.MapFrom(src => src.LocalisedPromotions
                                        .FirstOrDefault(x => x.CultureId == src.DefaultCultureId)));

因此,在我看来,这应该将LocalisedPromotionViewModel类型的字段DefaultLocalisedPromotion设置为

但是,该字段始终为空

有什么明显的方法可以做我想达到的目标

我写了一个单元测试,看来AutoMapper代码可以工作了。 请检查单元测试,让我知道它是否正确,或者发布更多代码(尤其是要映射的类),以便可以更改测试。

using AutoMapper;
using Xunit;

using System.Linq;
using System.Collections.Generic;

namespace AutoMapperTest
{
    public class LocalisedPromotion
    {
        public int Id;
        public int CultureId;
    }

    public class LocalisedPromotionViewModel
    {
        public int LocalisedPromotionId;
    }

    public class Promotion
    {
        public List<LocalisedPromotion> LocalisedPromotions;
        public int DefaultCultureId;
    }

    public class PromotionViewModel
    {
        public LocalisedPromotionViewModel DefaultLocalisedPromotion;
    }

    public class AutoMapperTest
    {
        [Fact]
        public void Test()
        {
            var theConfig = new MapperConfiguration(config =>
            {
                config.CreateMap<LocalisedPromotion, LocalisedPromotionViewModel>()
                    .ForMember(dest => dest.LocalisedPromotionId, o => o.MapFrom(src => src.Id));

                config.CreateMap<Promotion, PromotionViewModel>()
                    .ForMember(dest => dest.DefaultLocalisedPromotion,
                               o => o.MapFrom(src => src.LocalisedPromotions
                                                        .FirstOrDefault(x => x.CultureId == src.DefaultCultureId)));
            });

            var promotion = new Promotion { DefaultCultureId = 3 };
            promotion.LocalisedPromotions = new List<LocalisedPromotion>() { new LocalisedPromotion() { Id = 1, CultureId = 3 } };

            var result = theConfig.CreateMapper().Map<Promotion, PromotionViewModel>(promotion);

            Assert.NotNull(result.DefaultLocalisedPromotion);
            Assert.Equal(result.DefaultLocalisedPromotion.LocalisedPromotionId, 1);
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM