是的,这是另一个" Automapper not mapping"题。无论是破碎的东西还是我愚蠢的方式。我正在使用AutoMapper 3.2.0(当时最新的稳定版本)使用ASP.NET Core 2.1构建一个webapp,尽管我已经使用3.1.0进行了测试但没有运气。
问题
要映射到另一个的简单对象。为了测试和试验,这些现在完全相同,但仍然是自动化器:
AutoMapperMappingException:缺少类型映射配置或不支持的映射。
映射类型: NotificationModel - > NotificationViewModel ProjectName.Models.Dashboard.NotificationModel - > ProjectName.Models.Dashboard.NotificationViewModel
奇怪的是,我之前已经在Startup.cs文件中将这个模型设置为星期日的7种方式,唯一改变的是我的面部表情。其他地图使用类似的(如果不是相同的代码)来表示。
模特
NotificationModel.cs
public class NotificationModel
{
public int Id { get; set; }
public string Content { get; set; }
public DateTime CreateTS { get; set; }
public bool FlagRead { get; set; }
public bool FlagSticky { get; set; }
public bool FlagReceipt { get; set; }
public string ReceiptContact { get; set; }
public string UserId { get; set; }
public bool CANCELLED { get; set; }
}
NotificationViewModel.cs
public class NotificationViewModel
{
public int Id { get; set; }
//Reminder, this model has been amended to exactly represent that of the original model for testing purposes.
public string Content { get; set; }
public DateTime CreateTS { get; set; }
public bool FlagRead { get; set; }
public bool FlagSticky { get; set; }
public bool FlagReceipt { get; set; }
public string ReceiptContact { get; set; }
public string UserId { get; set; }
public bool CANCELLED { get; set; }
}
启动& Automapper配置
Mapper.Initialize(cfg =>
{
// Some other mappings removed for clarity.
cfg.CreateMap<GroupViewModel, GroupModel>().ReverseMap();
//cfg.CreateMap<EntityViewModel, EntityModel>().ReverseMap().ForAllOtherMembers(opt => opt.Ignore());
cfg.CreateMap<NotificationModel, NotificationViewModel>().ForAllMembers(opt => opt.Ignore());
cfg.CreateMap(typeof(NotificationViewModel), typeof(NotificationModel));
//I even left out the .ReverseMap, for testing purposes.
});
Mapper.AssertConfigurationIsValid();
用法
NotificationViewModel test = _mapper.Map<NotificationViewModel>(item); << Which
是我收到例外的地方。
其他尝试
好的,所以我已经通过一些解释不同内容的文章,然后分别尝试了以下内容:
cfg.CreateMap(typeof(NotificationModel), typeof(NotificationViewModel));
cfg.CreateMap<NotificationModel, NotificationViewModel>().ReverseMap().ForAllMembers(opt => opt.Ignore());
cfg.CreateMap<NotificationModel, NotificationViewModel>().ForAllOtherMembers(opt => opt.Ignore());
同时:
NotificationViewModel test = _mapper.Map<NotificationViewModel>(item);
_mapper.Map(item, typeof(NotificationViewModel), typeof(NotificationModel));
NotificationViewModel existingDestinationObject = new NotificationViewModel();
_mapper.Map<NotificationModel, NotificationViewModel>(item, existingDestinationObject);
我试过修改.Map()/。Map&lt;&gt;使用了几种方式,除了未配置的例外之外,其中任何一种方式都没有产生任何效果。
没有为这个对象手动编写转换(这对于它的目的来说足够简单),我迫切需要一个解决方案。如果不使用,那么至少要学习并帮助面对同样的人。
更新
IT工作!
通过项目扫描,我注意到之前文档中的某处 - 我读过有关创建一种&#34; config&#34;刚刚从名为Profile的抽象类继承的类。在这个类中,您还可以定义您的地图,但奇怪的是,我无法删除此类,只需在我的Startup.cs文件中使用配置映射设置。 Automapper将拒绝保留此单独类中未定义的任何映射。下面似乎得到了我需要的东西,但是我仍然需要解释为什么Automapper在没有它的情况下不能正常运行:
public class AMConfig : Profile
{
public AMConfig()
{
CreateMap<ManageUserModel, IndexViewModel>();
CreateMap<IndexViewModel, ManageUserModel>();
CreateMap<NotificationViewModel, NotificationModel>().ReverseMap();
CreateMap<List<NotificationViewModel>, List<NotificationModel>>().ReverseMap();
CreateMap<TaskViewModel, TaskModel>().ReverseMap();
}
}
谢谢!
答案 0 :(得分:0)
通过项目扫描,我注意到之前文档中的某处 - 我读过有关创建一种&#34; config&#34;刚刚从名为Profile的抽象类继承的类。在这个类中,您还可以定义您的地图,但奇怪的是,我无法删除此类,只需在我的Startup.cs文件中使用配置映射设置。 Automapper将拒绝保留此单独类中未定义的任何映射。下面似乎得到了我需要的东西,但是我仍然需要解释为什么Automapper在没有它的情况下不能正常运行:
public class AMConfig : Profile
{
public AMConfig()
{
CreateMap<ManageUserModel, IndexViewModel>();
CreateMap<IndexViewModel, ManageUserModel>();
CreateMap<NotificationViewModel, NotificationModel>().ReverseMap();
CreateMap<List<NotificationViewModel>, List<NotificationModel>>().ReverseMap();
CreateMap<TaskViewModel, TaskModel>().ReverseMap();
}
}