我有一个奇怪的情况,我无法弄清楚。我有一个简单的 ASP.NET MVC4 应用程序,并且正在使用 AutoMapper 在 ViewModel 和实体 (DB) 对象之间移动数据。
我要解决的问题是,当我到达CustomerController时,我对 AutoMapper 的配置Application_Start()
似乎消失了。Create()
如果我在该方法中调用 Configure,Create()
则从 CustomerViewModel 到 CustomerEntity 的映射正常工作。
我已经在互联网上搜索过,没有看到有人报告这个问题,所以希望有人能给我一个线索。这是细节......我希望有人有一些建议,因为它让我发疯!:P
在 global.asax.cs 中Application_Start()
,我在我的类上调用 configure() 方法:
AutoMapperConfigurator.Configure();
这是课程:
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()
并看到它在应用程序启动时被调用。
当我调用一个操作来创建一个新的客户实体时,会调用 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() 方法中调用 Configure,则从 CustomerViewModel 到 CustomerEntity 的映射正常工作。我已经在互联网上搜索过,没有看到有人报告这个问题,所以希望有人能给我一个线索。