当地图存在时,AutoMapper 会抛出 Missing Map

2024-04-12

规格:.NET 4.5.1 - MVC 5.2.2 - EF 6.0 - AutoMapper 3.2.1

我首先遇到代理对象错误,但能够通过执行以下操作解决它:AutoMapper 3.1.1 和 Entity Framework 6.1 代理对象 https://stackoverflow.com/questions/22723133/automapper-3-1-1-and-entity-framework-6-1-proxy-objects

Once I fixed that error, I instantly got the following error message:enter image description here

由于某种原因,它说从 Pages 到 PagesViewModel 的映射不存在,尽管它确实存在。这是我的代码:

In 全局.asax.cs:

protected void Application_Start()
{
     ConfigureAutomapper.Configure();
     ....

In AutoMapper.cs(已更新)

public static class ConfigureAutomapper
{
    public static void Configure()
    {
        ConfigurePublications();
        ConfigureBlog();
        ConfigureBasic();
        ConfigureLists();
    }

    public static void ConfigurePublications()
    {
        Mapper.Initialize(x =>
        {
            x.AddProfile<PublicationsMappings>();
        });
    }

    public static void ConfigureBlog()
    {
        Mapper.Initialize(x =>
        {
            x.AddProfile<BlogMappings>();
        });
    }

    public static void ConfigureBasic()
    {
        Mapper.Initialize(x =>
        {
            x.AddProfile<BasicMappings>();
        });
    }

    public static void ConfigureLists()
    {
        Mapper.Initialize(x =>
        {
            x.AddProfile<ListMappings>();
        });
    }
}

...

public class BasicMappings : Profile
    {
        public override string ProfileName
        {
            get
            {
                return "BasicMappings";
            }
        }

        protected override void Configure()
        {
            Mapper.CreateMap<Pages, PagesViewModel>();

            Mapper.CreateMap<PagesViewModel, Pages>();
            ...

我已经追踪了它,它进入那里并创建了地图。当它去使用转换时,它不起作用。

对于 model 和 viewModel,所有变量名称都是相同的。我只添加了数据注释和一些清理类set { pageDescription = value.StringSanitizer(); }

声明链接对象/表时会出现差异:

Model:

public virtual PageType PageTypes { get; set; }
public virtual SiteMap SiteMap { get; set; }
public virtual ICollection<Rows> Row { get; set; }
public virtual Track Tracks { get; set; }

而我的视图模型:

public PageTypeViewModel PageTypes { get; set; }
public SiteMapViewModel SiteMap { get; set; }
public ICollection<RowsViewModel> Row { get; set; }
public TrackViewModel Tracks { get; set; }

连接到这些模型的 viewModel。所有这些都映射在 AutoMapper.cs 中


UPDATE:我的项目中已经有一个单元测试:

[TestMethod]
public void AutoMapper_Basic_Configuration_IsValid()
{
      //Arrange

      //Act
      ConfigureAutomapper.ConfigureBasic();

      //Assert
      Mapper.AssertConfigurationIsValid();
 }

它通过了所有测试,没有映射错误。

谁能给我一些关于这个问题的见解?如果您需要更多信息,请告诉我。谢谢你!


代替Mapper.CreateMap<Pages, PagesViewModel>();, use CreateMap<Pages, PagesViewModel>();.

protected override void Configure()
    {
        CreateMap<Pages, PagesViewModel>();

        CreateMap<PagesViewModel, Pages>();
     ...

在配置文件中,您需要引用以下实例Mapper这是this.CreateMap或者简单地CreateMap.

Update更新我的答案,以便未来的读者不必费力地浏览评论来找出问题。

问题是多次调用Mapper.Initialize。每个新的调用都会清除以前的初始化。修复方法是进行一次初始化调用并在其中添加所有配置文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当地图存在时,AutoMapper 会抛出 Missing Map 的相关文章

随机推荐