Недавно я добавил 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;
});
}
}
У меня есть проблемы:
каждое строковое свойство, даже если оно равно нулю в базе данных, возвращается как пустая строка после сопоставления
Timespan?возвращается как 00:00:00, если оно равно нулю в базе данных
- bool?возвращается как ложное
Из-за того, что способ разработки внешнего интерфейса требует нулевых значений, мне не нужно игнорировать нулевые значения.
Я обнаружил, что Iможно использовать
cfg.AllowNullCollections = true;
cfg.AllowNullDestinationValues = true;
, но, к сожалению, процесс отображения по-прежнему не возвращает нулевые значения.Почему это так?
Спасибо