我的项目中的某人错误地在自动映射器配置文件中写下了以下句子:
Mapper.CreateMap<Appointment, AppointmentModel>()
.ForMember(x => x.DeclineStart, o => o.MapFrom(x => x.DeclineStart.ToString()))
其中 DeclineStart
是实体和模型类的属性。
public class Appointment
{
public bool DeclineStart { get; set; }
}
public class AppointmentModel
{
public bool DeclineStart { get; set; }
}
我知道在这种情况下没有必要为此属性创建任何映射规则。
令我惊讶的是,这个映射(从String
到Boolean
)正在工作。
但是当我们在 Azure 云服务上发布我们的应用程序时,这段代码会抛出 AutoMapperMappingException
,这表明:
Missing type map configuration or unsupported mapping.
Mapping types:String -> Boolean (System.String -> System.Boolean)
Destination path: AppointmentModel.DeclineStartBackfill.DeclineStartBackfill
Source value:False
为什么相同的代码可以在本地运行,但不能在 Azure 上运行?
提前致谢!
<小时/>Azure 计算机配置:Windows Server 2012 R2/.NET Framework 4.5.1
本地计算机配置:Windows 7/.NET Framework 4.5.2
自动映射器版本:3.1.0
最佳答案
是否已部署所有 AutoMapper 程序集(包括 AutoMapper.Net4.dll 程序集)?该附加程序集具有 .NET 4 中可用的扩展,这些扩展在其他地方不可用,包括类型转换器。
您有两个选择:手动引用 .NET4.dll 程序集中的某些内容:
public static class LinkerHelper {
public static object BecauseAzureDeploymentsAreDumb() {
var foo = typeof(HashSetMapper);
return foo;
}
}
或者升级到 AutoMapper 的最新测试版,我在其中组合了特定于平台的程序集。
关于c# - 从字符串到 bool 值的奇怪映射行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30002437/