首页 文章

automapper显示错误“指定的强制转换无效” .

提问于
浏览
0

我在使用模型映射DataTable时遇到错误

这是我的代码

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();
        }

错误的堆栈跟踪如下

[InvalidCastException:指定的强制转换无效 . ] DynamicCreate(IDataRecord)1673
AutoMapper.Mappers.DataReaderMapper.Map(ResolutionContext context,IMappingEngineRunner mapper)433 AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext context)347 [AutoMapperMappingException:试图将System.Data.IDataReader映射到System.Collections.Generic.IList1 [[ SkillKindle.BLL.Feedbacks.ExcelFeedbackRecord,SkillKindle.BLL,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]] . 抛出了“AutoMapper.AutoMapperMappingException”类型的异常 . ] AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext context)433 AutoMapper.MappingEngine.Map(Object source,Type sourceType,Type destinationType,Action1 opts)353 AutoMapper.MappingEngine.Map (TSource源码)564 AutoMapper.Mapper.Map(TSource源码)461 SkillKindleAdmin.Controllers.FeedbackController.ExcelUpload(HttpPostedFileBase文件)在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,IDictionary2参数)326 System.Web.Mvc.Async.AsyncControllerActionInv oker.InvokeSynchronousActionMethod(ControllerContext controllerContext,ActionDescriptor actionDescriptor,IDictionary2 parameters)317 System.Web.Mvc.Async . <> c__DisplayClass42 . <BeginInvokeSynchronousActionMethod> b__41()219 System.Web.Mvc.Async . <> c__DisplayClass81.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 . <InvokeActionMethodFilterAssechronously> b__49()461 System.Web.Mvc.Async . <> c__DisplayClass37 . < BeginInvokeActionMethodWithFilters> b__36(IAsyncResult asyncResult)235 System.Web.Mvc.Async.WrappedAsyncResult1.End()328 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult,Object tag)492 System.Web.Mvc.Async.AsyncCo ntrollerActionInvoker.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.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.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系统 . 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.WrappedAsyncResult1.End()333 System.Web.Mvc.Async.AsyncResultWrapper . End(IAsyncResult asyncResult,Object tag)397 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult,Object tag)266System.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 回答

  • 0

    您确定datareader返回的列与对象ExcelFeedbackRecord中的属性字段完全匹配,包括套管吗?如果不是,则必须在创建 Map 时添加配置 .

  • 0

    那么问题是当我们用模型映射DataSet时,模型的所有属性只能是字符串类型,然后你可以使用automapper的CustomTypeConversion方法 .

相关问题