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;
}
}
AutoMapperを使用しないでください。 LINQを使用してアイテムのコレクションを個別に選択します。 – krillgar
フィールドが異なる可能性のあるDTOごとに別々にコーディングする必要はありません。ただし、各DTOは、ストアドプロシージャによって取得されるDataTableに対応します。 –
Entity Frameworkを使用できますか?これは、ストアドプロシージャの実行とC#オブジェクトへの自動的な変換をサポートします。使用しているDTOごとにAutoMapper設定を作成する必要があることは間違いありません。 – krillgar