0
votes

i am getting error while mapping DataTable with the model

here is my code

       if (file.ContentLength > 0)
        {
            var extension = Path.GetExtension(file.FileName);
            if (extension != null && extension.ToLower() != ".xlsx")
            {
                return "please upload file with extension .xlsx";
            }

            Stream stream = file.InputStream;
            IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
            excelReader.IsFirstRowAsColumnNames = true;
            DataSet result = excelReader.AsDataSet();
            if (result.Tables.Count > 0)
            {
                Mapper.Reset();
                Mapper.CreateMap<IDataReader, ExcelFeedbackRecord>();

                var results = Mapper.Map<IDataReader, IList<ExcelFeedbackRecord>>(result.Tables[0].CreateDataReader());

            }
            return result.Tables[0].Rows.Count.ToString();
        }

stack trace for error is below

       [InvalidCastException: Specified cast is not valid.]    DynamicCreate(IDataRecord ) +1673   

AutoMapper.Mappers.DataReaderMapper.Map(ResolutionContext context, IMappingEngineRunner mapper) +433
AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext context) +347

[AutoMapperMappingException: Trying to map System.Data.IDataReader to System.Collections.Generic.IList1[[SkillKindle.BLL.Feedbacks.ExcelFeedbackRecord, SkillKindle.BLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]. Exception of type 'AutoMapper.AutoMapperMappingException' was thrown.]
AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext context) +433 AutoMapper.MappingEngine.Map(Object source, Type sourceType, Type destinationType, Action
1 opts) +353
AutoMapper.MappingEngine.Map(TSource source) +564
AutoMapper.Mapper.Map(TSource source) +461
SkillKindleAdmin.Controllers.FeedbackController.ExcelUpload(HttpPostedFileBase file) in d:\Skill Online\trunk\SkillKindleAdmin\Controllers\FeedbackController.cs:57
lambda_method(Closure , ControllerBase , Object[] ) +107
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +286
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary2 parameters) +655
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
2 parameters) +326
System.Web.Mvc.Async.AsyncControllerActionInvoker.InvokeSynchronousActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 parameters) +317
System.Web.Mvc.Async.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() +219 System.Web.Mvc.Async.<>c__DisplayClass8
1.b__7(IAsyncResult ) +275 System.Web.Mvc.Async.WrappedAsyncResult1.End() +328 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +492
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +261
System.Web.Mvc.Async.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() +268 System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +461 System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) +235 System.Web.Mvc.Async.WrappedAsyncResult
1.End() +328 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +492
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +262
System.Web.Mvc.Async.<>c
_DisplayClass2a.b_20() +203 System.Web.Mvc.Async.<>c_DisplayClass25.b_22(IAsyncResult asyncResult) +392 System.Web.Mvc.Async.WrappedAsyncResult1.End() +316 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +387
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +285
System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +234
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +275 System.Web.Mvc.Async.WrappedAsyncResult
1.End() +333
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +397
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +266
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +253 System.Web.Mvc.Async.<>c
_DisplayClass4.b__3(IAsyncResult ar) +275 System.Web.Mvc.Async.WrappedAsyncResult1.End() +333
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +397
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +266 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +254
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +226
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +230
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +275 System.Web.Mvc.Async.WrappedAsyncResult
1.End() +333
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +397
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +266
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +255 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +225
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +1086 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +603

2

2 Answers

0
votes

Are you sure the columns returned by the datareader exactly match the property fields in the object ExcelFeedbackRecord, including casing? If they are not, you'll have to add a configuration when creating the map.

0
votes

Well the problem was that when we map DataSet with model, all property of model must be of string type only and then you can use CustomTypeConversion methods of automapper.