【问题标题】:AutoMapper is not returning data from DataTableAutoMapper 没有从 DataTable 返回数据
【发布时间】:2018-11-12 09:34:45
【问题描述】:

我正在使用 AutoMapper 插件将 DataTable 映射到 C# Object。 这是我的代码:

public List<MyDto> GetReport()
{
    List<MyDto> list = null;
    var config = new MapperConfiguration(cfg =>
    {
        cfg.CreateMap<IDataReader, List<MyDto>>();
    });
    IMapper mapper = config.CreateMapper();
    list = mapper.Map<IDataReader, List<MyDto>>(Odao.Inst.GetReport().Tables[0].CreateDataReader()).ToList();
    return list;
}

我的 MyDto 类看起来像这样

public class MyDto
{
     public int EmployeeId { get; set; }
     public string FullName { get; set; }
}

在这里,数据从我的数据访问层正确返回,但是当它映射到对象时,列表为空。我这里有什么遗漏吗?

【问题讨论】:

  • 不能用NHibernate从数据库中获取数据吗?像list = sessionService.GetDefaultSession().Query&lt;MyDto&gt;() 这样的东西。据我所知,您无法使用 AutoMapper 从数据库中获取数据,还是我错了?
  • 数据正在使用此行返回。 Odao.Inst.GetReport().Tables[0] 但是,此数据到对象映射不起作用
  • 如果您尝试cfg.CreateMap&lt;IDataReader, List&lt;MyDto&gt;&gt;().ReverseMap() 只是为了看看会发生什么?
  • 运气不好cfg.CreateMap&lt;IDataReader, List&lt;MyDto&gt;&gt;().ReverseMap()

标签: c# object datatable dataset automapper


【解决方案1】:

我使用 AutoMapper 3.3.1 版解决了这个问题。 基本上,版本 4 及更高版本将不支持此 IDataReader 功能。

现在,下面的代码对我有用。

Mapper.Reset();
Mapper.CreateMap<IDataReader, MyDto>();
list = Mapper.Map<IDataReader,List<MyDto>>(Odao.Inst.GetReport().Tables[0].CreateDataReader()).ToList(); 

【讨论】:

  • 因为它被移到了 AutoMapper.Data。
  • @LucianBargaoanu 如何使用AutoMapper.Data 达到同样的效果?我没有得到任何例子。
  • 浏览 repo 中的测试并在线查看。
  • @LucianBargaoanu 谢谢,有几个。
猜你喜欢
  • 2010-12-13
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
相关资源
最近更新 更多