2017-10-07 14 views
1

DataTableをPOCOリストに変換しようとしています。 StackOverflowでそのトピックにいくつかの答えを見つけました。すべてがO.Kでなければなりません。私は正しい結果を得ていません。結果は5つの項目の空のリストです。したがって、DataRowからPOCOオブジェクトへのマッピングはありません。 何が間違っている可能性がありますか?Automapper POCOリストへのDataTableマップ

AutoMapperはあなたがDataReaderオブジェクトのマッピングを追加するのを忘れバージョン6.1.1 AutoMapper.Dataバージョン1.0.0

class Program 
{ 
    static void Main(string[] args) 
    { 
    var config = new MapperConfiguration(cfg => 
     { 
      cfg.CreateMissingTypeMaps = true; 
      cfg.CreateMap<IDataReader, Person>(); 
     }); 
     var mapper = config.CreateMapper(); 

     DataTable tbl = DataGenerator.MyPersons(); 

     var result = mapper.Map<List<Person>>(tbl.CreateDataReader()); 
    } 
} 

public static class DataGenerator 
{ 
    public static DataTable MyPersons() 
    { 
     DataTable myPersonssDataTable = new DataTable(); 
     myPersonssDataTable.Columns.Add(new DataColumn() 
     { 
      ColumnName = "FirstName", 
      DataType = typeof(string) 
     }); 
     myPersonssDataTable.Columns.Add(new DataColumn() 
     { 
      ColumnName = "LastName", 
      DataType = typeof(string) 
     }); 
     myPersonssDataTable.Columns.Add(new DataColumn() 
     { 
      ColumnName = "DateOfBirth", 
      DataType = typeof(DateTime) 
     }); 
     myPersonssDataTable.Columns.Add(new DataColumn() 
     { 
      ColumnName = "JobTitle", 
      DataType = typeof(string) 
     }); 
     myPersonssDataTable.Columns.Add(new DataColumn() 
     { 
      ColumnName = "TakenName", 
      DataType = typeof(string) 
     }); 
     myPersonssDataTable.Columns.Add(new DataColumn() 
     { 
      ColumnName = "IsAmerican", 
      DataType = typeof(bool) 
     }); 

     myPersonssDataTable.Rows.Add(new object[] { "Lenny", "Belardo", new DateTime(1971, 3, 24), "Pontiff", "Pius XIII", true }); 
     myPersonssDataTable.Rows.Add(new object[] { "Angelo", "Voiello", new DateTime(1952, 11, 18), "Cardinal Secretary of State", "", false }); 
     myPersonssDataTable.Rows.Add(new object[] { "Michael", "Spencer", new DateTime(1942, 5, 12), "Archbishop of New York", "", true }); 
     myPersonssDataTable.Rows.Add(new object[] { "Sofia", "(Unknown)", new DateTime(1974, 7, 2), "Director of Marketing", "", false }); 
     myPersonssDataTable.Rows.Add(new object[] { "Bernardo", "Gutierrez", new DateTime(1966, 9, 16), "Master of Ceremonies", "", false }); 


     return myPersonssDataTable; 
    } 
} 

public class Person 
{ 
    public string FirstName { get; set; } 

    public string LastName { get; set; } 

    public DateTime DateOfBirth { get; set; } 

    public string JobTitle { get; set; } 

    public string TakenName { get; set; } 

    public bool IsAmerican { get; set; } 
} 

答えて

1

です。私はそれが役に立てば幸い

... 
var config = new MapperConfiguration(cfg => 
      { 
       cfg.AddDataReaderMapping(); 
       cfg.CreateMissingTypeMaps = true; 
       cfg.CreateMap<IDataReader, Person>(); 
      }); 
... 

cfg.AddDataReaderMapping(); 

次に、あなたのコードは、のようになります。

+0

cfg.AddDataReaderMapping()は私のバージョンのAutoMapperでは不明です。 私は最後のバージョンを使用します:AutoMapperはバージョン6.1.1です。AutoMapper.Dataバージョン1.0.0 –

+0

@DieterRuh「AddDataReaderMapping」は、クラス「ConfigurationExtensions」、アセンブリ「AutoMapper.Data」に格納されている拡張機能です。あなたが 'AutoMapper.Data;を使用しているかどうかを確認してください。 – dbvega

関連する問題