【发布时间】:2018-10-10 05:40:01
【问题描述】:
最近我在后端添加了 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;
});
}
}
我的问题是
每个字符串属性,即使它在数据库中为空,在映射后也会作为空字符串返回
时间跨度?如果在数据库中为空,则返回 00:00:00
- 布尔?被返回为假
由于前端的开发方式需要空值,我不需要忽略空值。
我发现我可以使用
cfg.AllowNullCollections = true;
cfg.AllowNullDestinationValues = true;
但不幸的是,映射过程仍然没有返回空值。 这是为什么呢?
谢谢
【问题讨论】:
-
尝试使用 ResolveUsing。
-
卢锡安您好,感谢您的评论。我做到了,但这并没有解决任何问题。
-
我以为它会抛出。检查the execution plan。
标签: c# automapper