2017-01-12 2 views
1

Ado.Netを使用して取得したDataTableをDTOに変換しようとしています。渡される型 "T"のDTOは、DataTableと全く同じフィールドとデータ型を持っていますが、以下の例外があります。Auto Mapper - DataTableから汎用型(DTO用)マッピングが機能しない

これは実行可能ですか? geekytiditsのBrady Holtは、次のような古い記事を持っていますが、DynamicMapは廃止されました。

List people = AutoMapper.Mapper.DynamicMap>( sourceDataTable.CreateDataReader());


マッピングされていないメンバーが見つかりました。以下の種類とメンバーを確認してください。カスタムマッピング式の追加、無視、カスタムリゾルバの追加、またはソース/宛先タイプの変更

IDataReader - > UserDto(宛先メンバーリスト) System.Data.IDataReader - > MyApp.Console.UserDto(宛先メンバーリスト)

マップされていないプロパティ: ユーザーID // int型 姓//文字列型の


コード以下のFirstName //文字列型:

public static class DtoTransformDataTable<T> 
{ 
    public static IEnumerable<T> JustDoIt(DataTable dt) 
    { 
       var config = new MapperConfiguration(cfg => 
     { 
      cfg.CreateMap<IDataReader, IEnumerable<T>>(); 
     }); 

       var mapper = config.CreateMapper(); 

       try 
       { 
        mapper.ConfigurationProvider.AssertConfigurationIsValid(); 
       } 
       catch (Exception ex) 
       { 
        throw ex; 
       } 

       var listOfT = mapper.Map<List<T>>(dt.CreateDataReader()); 

     return listOfT; 
    } 
} 
+1

AutoMapperを使用しないでください。 LINQを使用してアイテムのコレクションを個別に選択します。 – krillgar

+0

フィールドが異なる可能性のあるDTOごとに別々にコーディングする必要はありません。ただし、各DTOは、ストアドプロシージャによって取得されるDataTableに対応します。 –

+0

Entity Frameworkを使用できますか?これは、ストアドプロシージャの実行とC#オブジェクトへの自動的な変換をサポートします。使用しているDTOごとにAutoMapper設定を作成する必要があることは間違いありません。 – krillgar

答えて

0

IDataReaderのサポートがAutomapper 4.0から削除されたとの別の投稿があります。

しかし、私は答えを見つけたSO

関連する問題