如何在Automapper中使用数据集?

时间:2011-03-03 12:50:10

标签: dataset automapper

我目前正在使用datareader作为源,但我想改为使用数据集。

//datareader

AutoMapper.Mapper.CreateMap<IDataReader, AccountDTO>()
             .ForMember(m => m.AccountId, opt => opt.MapFrom (r => r.GetInt32(r.GetOrdinal("AccountId"))))
             .ForMember(m => m.ParentAccountId, opt => opt.MapFrom(r => r.GetInt32(r.GetOrdinal("ParentAccountId"))))
             .ForMember(m => m.IsInactive, opt => opt.MapFrom(r => r.GetString(r.GetOrdinal("IsInactive"))))
             .ForMember(m => m.AccountName, opt => opt.MapFrom(r => r.GetString(r.GetOrdinal("AccountName"))))


//dataset

 AutoMapper.Mapper.CreateMap<DataSet, AccountDTO>()
                 .ForMember(m => m.AccountId, opt => opt.MapFrom(r => r.Tables[0].Columns[Constants.MappingFields.Accounts.AccountId]))
                 .ForMember(m => m.ParentAccountId, opt => opt.MapFrom(r => r.Tables[0].Columns[Constants.MappingFields.Accounts.ParentAccountId]))
                 .ForMember(m => m.IsInactive, opt => opt.MapFrom(r => r.Tables[0].Columns[Constants.MappingFields.Accounts.IsInactive]))
                 .ForMember(m => m.AccountName, opt => opt.MapFrom(r => r.Tables[0].Columns[Constants.MappingFields.Accounts.AccountName]))
                 .ForMember(m => m.AccountNumber, opt => opt.MapFrom(r => r.Tables[0].Columns[Constants.MappingFields.Accounts.AccountNumber]))

任何想法?

1 个答案:

答案 0 :(得分:3)

我想使用数据集而不是datareader,所以我不打开与数据库的连接。

我想我找到了解决方案;

  1. 创建数据集并关闭/部署连接
  2. 从数据表创建一个datatablereader并传入in
  3. 这似乎有效。

     DataTableReader dataTableReader = ds.Tables[0].CreateDataReader();
                    conn101.Close();
                    conn101.Dispose();
    
    
                    List<AccountDTO> accountDto1s = Mapper.Map<IDataReader, List<AccountDTO>>(dataTableReader);