C# 找不到映射
我一直在努力使用自动映射和嵌套对象。我得到以下错误:C# 找不到映射,c#,asp.net,asp.net-mvc,automapper,C#,Asp.net,Asp.net Mvc,Automapper,我一直在努力使用自动映射和嵌套对象。我得到以下错误: Missing type map configuration or unsupported mapping. AdminSchema -> Schema 但这对我来说并不正确,因为我确实配置了以下映射: Mapper.CreateMap<Schema, AdminSchema>().ReverseMap(); Mapper.CreateMap().ReverseMap(); 它应该映射以下模型: public clas
Missing type map configuration or unsupported mapping.
AdminSchema -> Schema
但这对我来说并不正确,因为我确实配置了以下映射:
Mapper.CreateMap<Schema, AdminSchema>().ReverseMap();
Mapper.CreateMap().ReverseMap();
它应该映射以下模型:
public class AdminSchema
{
[Required]
[Display(Name = "Opeenvolgende weken")]
public int ConsecutiveWeeks { get; set; }
public List<AdminWorkDay> WorkDays { get; set; }
public bool Delete { get; set; }
}
public class AdminWorkDay
{
public int DayOfWeekNumber { get; set; }
public string StartTime { get; set; }
public string EndTime { get; set; }
public TimeSpan BreakTime { get; set; }
public bool Delete { get; set; }
}
公共类AdminSchema
{
[必需]
[显示(Name=“Opeenvolgende weken”)]
公共整数连续周{get;set;}
公共列表工作日{get;set;}
公共布尔删除{get;set;}
}
公共课管理工作日
{
public int DayOfWeekNumber{get;set;}
公共字符串开始时间{get;set;}
公共字符串结束时间{get;set;}
公共时间间隔中断时间{get;set;}
公共布尔删除{get;set;}
}
到
公共类架构
{
公共int Id{get;set;}
公共整数连续周{get;set;}
公共列表工作日{get;set;}
}
公课工作日
{
公共int Id{get;set;}
public int DayOfWeekNumber{get;set;}
公共日期时间开始时间{get;set;}
公共日期时间结束时间{get;set;}
公共时间间隔中断时间{get;set;}
}
对于字符串到日期时间的映射,我有以下代码:
Mapper.CreateMap<string, DateTime>().ConvertUsing<StringToDateTimeConverter>();
public class StringToDateTimeConverter : ITypeConverter<string, DateTime>
{
public DateTime Convert(ResolutionContext context)
{
var sourceDt = context.SourceValue;
DateTime targetDt;
if (sourceDt == null)
{
return default(DateTime);
}
return DateTime.TryParse(sourceDt.ToString(), out targetDt) ? targetDt : default(DateTime);
}
}
Mapper.CreateMap().ConvertUsing();
公共类StringToDateTimeConverter:ITypeConverter
{
公共日期时间转换(ResolutionContext上下文)
{
var sourceDt=context.SourceValue;
日期时间目标dt;
if(sourceDt==null)
{
返回默认值(日期时间);
}
return DateTime.TryParse(sourceDt.ToString(),out targetDt)?targetDt:default(DateTime);
}
}
下面是映射的实现:
var workPeriod = new WorkPeriod {
Schemas = Mapper.Map<List<AdminSchema>, List<Schema>>(workPeriodVm.Schemas)
};
var workPeriod=新的工作周期{
Schemas=Mapper.Map(workPeriodVm.Schemas)
};
如果有人知道为什么找不到我的地图,请告诉我。非常感谢。其他映射确实起作用,因此automapper的配置通常是正确的。显然,TSource和TDestation中的
工作日类型不相等,而您必须在automapper Nuget包中将TSource和TDestation类型设置为相等。
例如,将WorkDays
属性的TSource和TDestination类型更改为AdminWorkDay
,您会发现它工作正常。为什么要使用ReverseMap?因为对于详细信息页面,我必须以另一种方式映射,或者使用ReverseMap是一种不好的做法?我使用它-如果您从指定类型映射到指定类型,这是必要的。你有WorkDay
和AdminWorkDay
的映射吗?@Ric,是的,我有:Mapper.CreateMap().ReverseMap();我测试了你的代码,它在这里工作。你确定你没有遗漏什么吗?您使用的AutoMapper版本是什么?
var workPeriod = new WorkPeriod {
Schemas = Mapper.Map<List<AdminSchema>, List<Schema>>(workPeriodVm.Schemas)
};