2011-03-03 13 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コードは正常に動作しますが、データセットは正常に動作しません。ソースとしてデータセットを使ってオートマトンを動作させる方法を知りたい – kurasa

答えて

3

データレアの代わりにデータセットを使用したいので、データベースへの接続を開いたままにしておきます。

私は解決策を見つけたと思います。

  1. は、データセットを作成し、近い/データテーブルからdatatablereaderを作成し、接続
  2. を配置し、これが動作しているようだ

に渡します。

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


       List<AccountDTO> accountDto1s = Mapper.Map<IDataReader, List<AccountDTO>>(dataTableReader); 
関連する問題