2011-03-03 29 views
2

我目前使用datareader作为源,但我想改为使用数据集。如何在Automapper中使用数据集?

//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])) 

有什么想法吗?

+0

什么问题?我看到你提供了使用数据集映射的代码,所以我不确定问题是什么。 – PatrickSteele

+0

我想根据上面的代码用数据集替换数据读取器。 datareeader代码工作正常,但数据集没有。我想知道如何使automapper作为源数据集工作 – kurasa

回答

3

我想使用数据集而不是数据读取器,所以我不保持打开数据库的连接。

我想我找到了解决办法;

  1. 创建数据集和关闭/处置连接
  2. 创建从数据表中的datatablereader并通过在

这似乎是工作。

DataTableReader dataTableReader = ds.Tables[0].CreateDataReader(); 
       conn101.Close(); 
       conn101.Dispose(); 


       List<AccountDTO> accountDto1s = Mapper.Map<IDataReader, List<AccountDTO>>(dataTableReader);