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

时间:2013-05-14 08:56:14

标签: c# asp.net-mvc automapper fluentvalidation

我在使用模型

映射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: Specified cast is not valid.]    DynamicCreate(IDataRecord ) +1673   
     

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

     

[AutoMapperMappingException:尝试将System.Data.IDataReader映射到   System.Collections.Generic.IList 1[[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源码)+564
  AutoMapper.Mapper.Map(TSource源码)+461
  SkillKindleAdmin.Controllers.FeedbackController.ExcelUpload(HttpPostedFileBase   文件)在d:\技能   在线\干线\ SkillKindleAdmin \ \控制器FeedbackController.cs:57个
  lambda_method(Closure,ControllerBase,Object [])+ 107 7   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase   controller,Object []参数)+286
  System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext   controllerContext,IDictionary 2 parameters) +655
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
2   参数)+326
  System.Web.Mvc.Async.AsyncControllerActionInvoker.InvokeSynchronousActionMethod(ControllerContext   controllerContext,ActionDescriptor actionDescriptor,IDictionary 2 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.WrappedAsyncResult 1.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&LT;。&以及c
_DisplayClass2a.b_ 20()   +203 System.Web.Mvc.Async。&lt;&gt; c _DisplayClass25.b_ 22(IAsyncResult   asyncResult)+392 System.Web.Mvc.Async.WrappedAsyncResult 1.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,   对象标签)+397
  System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult,   对象标签)+266
  System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)   +253 System.Web.Mvc.Async。&lt;&gt; c
_DisplayClass4.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.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,   对象标签)+397
  System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult,   对象标签)+266
  System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)   +255 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult)   结果)+225
  System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   +1086 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&amp; completedSynchronously)+603

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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