映射

2017-02-15 44 views
1

當我使用automapper V4.1.1和automapper.data1.0.0.beta 1.我有控制檯應用程序,我的映射代碼AutoMapper.Data錯誤的樣子:映射

Mapper.Initialize(cfg => { 
      MapperRegistry.Mappers.Add(new DataReaderMapper {YieldReturnEnabled = true} 
      ); 

      cfg.CreateMap<IDataRecord, AircraftDetails>(); 

     }); 

我的DB調用代碼映射看起來像

var aircraft=new AircraftDetails();   
     using (SqlConnection connection = 
       new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings[_connectionString].ConnectionString)) 
     { 
      SqlCommand command = 
       new SqlCommand(storedProcedureAsString, connection); 


      command.AddInputParameters(new {a=aircraftId}); 

      connection.Open(); 

      SqlDataReader reader = command.ExecuteReader(); 
      if (reader.HasRows) 
      { 

       var res = Mapper.Map<IDataReader, IEnumerable<AircraftDetails>>(reader); 

       aircraft = res.FirstOrDefault(); 
      } 

     } 

     return aircraft; 

當我運行這段代碼我得到錯誤:

Unhandled Exception: System.InvalidCastException: Specified cast is not valid. at DynamicCreate(IDataRecord) at AutoMapper.Data.DataReaderMapper.d__10.MoveNext() at System.Linq.Enumerable.d__94 1.MoveNext() at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable 1 source)

任何想法我做錯了嗎?

乾杯

伊斯梅爾

回答

0

不知道,但可能是你不應該創建映射IDataRecord,但IDataReader的:

cfg.CreateMap<IDataReader, IEnumerable<AircraftDetails>>(); 

基於this question

+1

嗨kudrya,試過了沒有快樂。我只是遵循automapper.data測試中的例子,這是如何完成看到https://github.com/AutoMapper/AutoMapper.Data/blob/master/AutoMapper.Data.Tests/DataReaderMapping.cs測試When_mapping_a_data_reader_to_a_dto所以映射是IDataRecord但在地圖IDataReader有點像IDataReader中的讀取給你IDataRecord。 – Ismail

+0

Hm,在配置部分中的'cfg.AddMemberConfiguration()。AddMember ();'怎麼辦? – kudrya

+0

kudrya,沒有試過,因爲我然後決定使用別的東西,因爲我時間緊迫,所以我去了https://github.com/sixeyed/projects/tree/master/Sixeyed.Mapping哪些作品。如果我有時間,我可以嘗試重溫。非常感謝您的幫助。 – Ismail