映射空值会产生默认类型值(自动映射器 ADO.NET)



最近我在后端添加了AutoMapper(7.0.1(,顺便说一下,它不使用任何ORM,只是普通的 ADO.NET。

所以我为我们的模型创建了映射配置文件,如下所示:

public class UserMapping:Profile
{
public UserMapping()
{
var mappingExpression = CreateMap<DataRow, User>();
mappingExpression.ForMember(d => d.Id, o => o.MapFrom(s => s["Id"]));
mappingExpression.ForMember(d => d.Location, o => o.MapFrom(s => s["Location"]));
mappingExpression.ForMember(d => d.Team, o => o.MapFrom(s => s["Team"]));
mappingExpression.ForMember(d => d.LoginId, o => o.MapFrom(s => s["LoginID"]));
mappingExpression.ForMember(d => d.FirstName, o => o.MapFrom(s => s["FirstName"]));
mappingExpression.ForMember(d => d.LastName, o => o.MapFrom(s => s["LastName"]));
mappingExpression.ForMember(d => d.Email, o => o.MapFrom(s => s["Email"]));
mappingExpression.ForMember(d => d.Active, o => o.MapFrom(s => s["Active"]));
mappingExpression.ForMember(d => d.Date, o => o.MapFrom(s => s["Date"]));
mappingExpression.ForMember(d => d.Entity, o => o.MapFrom(s => s["Entity"]));
}
}

以及一个实用程序类,它只是启动映射器。

public static class Mapping
{
public static void Configure()
{
Mapper.Initialize(cfg =>
{
cfg.AddProfile<UserMapping>();
//other profiles
cfg.AllowNullCollections = true;
cfg.AllowNullDestinationValues = true;
});
}

}

我遇到的问题是

  • 每个字符串属性,即使它在数据库中为 null,在映射后也作为空字符串返回

  • 时间跨度?如果它在数据库中为 null,则返回 00:00:00

  • 布尔值?被返回为假值

由于前端的开发方式需要空值,我不需要忽略空值。

我发现我可以使用

cfg.AllowNullCollections = true;
cfg.AllowNullDestinationValues = true;

但不幸的是,映射过程仍然没有返回空值。 为什么?

谢谢

经过几个小时的搜索,我找到了解决方法。

例如,对于我关心的属性 我将映射表达式从

mappingExpression.ForMember(m => m.CutOffTime, s => s.MapFrom(o => o["CutOffTime"]));

mappingExpression.ForMember(m => m.CutOffTime, s => s.MapFrom(o => o["CutOffTime"] ==  DBNull.Value ? null : o["CutOffTime"] ));

现在,api 按预期返回空值。

最新更新