2011-03-03 7 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

위 코드에 따라 datareader를 데이터 세트로 대체하려고합니다. datareeader 코드는 제대로 작동하지만 데이터 셋은 작동하지 않습니다. 나는 소스로 데이터 세트와 automapper 작업을 할 수있는 방법을 알고 싶습니다 – kurasa

답변

3

데이터베이스에 대한 연결을 유지하지 않도록 datareader 대신 데이터 세트를 사용하고 싶습니다.

나는 해결책을 찾았습니다.

  1. 는 데이터 집합을 만들고 가까운/DataTable의에서 datatablereader를 만들 연결
  2. 을 처분하고이 작동하는 것 같군

에 전달합니다.

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


       List<AccountDTO> accountDto1s = Mapper.Map<IDataReader, List<AccountDTO>>(dataTableReader); 
관련 문제