gpt4 book ai didi

ASP.NET MVC4 自动映射器 : Loses mapping when reach a Controller

转载 作者:行者123 更新时间:2023-12-02 12:29:59 26 4
gpt4 key购买 nike

我遇到了一个奇怪的情况,我无法弄清楚。我有一个简单的 ASP.NET MVC4 应用程序,并使用 AutoMapper 在 ViewModel 和实体 (DB) 对象之间移动数据。

我正在解决的问题是,当我在 CustomerController 中到达 Create() 时,我在 Application_Start() 中对 AutoMapper 的配置似乎消失了。

如果我在 Create() 方法中调用Configure,则从 CustomerViewModel 到 CustomerEntity 的映射可以正常工作。

我查遍了互联网,没有看到有人报告这个问题,所以希望有人能给我线索。以下是详细信息...我希望有人提出一些建议,因为这让我发疯! :P

在 global.asax.cs 的 Application_Start() 中,我在类上调用 configure() 方法:

AutoMapperConfigurator.Configure();

这是类(class):

public class AutoMapperConfigurator
{
public static void Configure()
{
Mapper.Initialize(x => x.AddProfile<AutoMappingProfile>());
}
}

AutomMappingProfile 是我的 AutoMapper 配置文件类。其实现如下:

public class AutoMappingProfile : Profile    

public override string ProfileName
{
get { return "AutoMappingProfile";}
}

protected override void Configure()
{
CreateMaps();
}

private void CreateMaps()
{
CreateMap<CustomerEntity, CustomerEntity>();
CreateMap<CustomerViewModel, CustomerViewModel>();
CreateMap<CustomerEntity, CustomerViewModel>().IgnoreAllNonExisting();
CreateMap<CustomerViewModel, CustomerEntity>().IgnoreAllNonExisting();

CreateMap<CustomerVendorProductEntity, CustomerVendorProductEntity>();
CreateMap<CustomersVendorsProductViewModel, CustomersVendorsProductViewModel>();
CreateMap<CustomerVendorProductEntity, CustomersVendorsProductViewModel>().IgnoreAllNonExisting();
CreateMap<CustomersVendorsProductViewModel, CustomerVendorProductEntity>().IgnoreAllNonExisting();
}
}

我在 CreateMaps() 上设置了一个断点,并看到它在应用程序启动时被调用。

当我调用操作来创建新的 Customer 实体时,将调用 CustomerController 中的 Create() 方法。

    [AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([DataSourceRequest] DataSourceRequest request, CustomerViewModel vm)
{
.
.
var customer = AutoMapper.Mapper.Map<CustomerViewModel, CustomerEntity>(vm);
.
.
}

从列表到集合的映射始终会失败,并出现 NotSupportedException

我已经实现了ListSourceMapper,它在Configure()中作为Mapper加载。我没有在这里展示它,因为它有效...我正在解决的问题是,当我到达 CustomerController 中的 Create() 时,我在 Application_Start() 中对 AutoMapper 的配置似乎消失了。如果我在 Create() 方法中调用配置,则从 CustomerViewModel 到 CustomerEntity 的映射可以正常工作。我查遍了互联网,没有看到有人报告这个问题,所以希望有人能给我线索。

最佳答案

我去年遇到了类似的问题,我在这里描述了:

ASP.NET MVC4 AutoMapper: Loses mapping when reach a Controller

我有一个 Controller ,它具有以下构造函数:

 IApplicationDAO applicationDAO = new ApplicationDAO();
public ApplicationController()
{
Mapper.Initialize(cfg => {
cfg.CreateMap<ApplicationModel, BusinessObjects.Application>();
});

和一个数据对象,它具有以下构造函数:

public ApplicationDAO()
{
Mapper.Initialize(cfg =>
{
cfg.CreateMap<BusinessObjects.Application, DataObjects.dbApplication>()
.ReverseMap();
});
}

数据对象创建一次并由构造函数调用多次。每次构造函数调用数据对象时,它都会覆盖 ApplicationDAO 中设置的映射,这意味着 AutoMapper 总是会产生错误。

对我来说,解决方案是确保所有映射都在组合根(即 Global.asax)中创建。

关于ASP.NET MVC4 自动映射器 : Loses mapping when reach a Controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12813590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com