用户代码未处理InvalidOpertationExecution

时间:2011-12-22 02:10:58

标签: c# asp.net-mvc-3 entity-framework

当我运行我的应用程序时,我收到此错误:

InvalidOperationException:'SiteTable'上的'Id'属性无法设置为'Double'值。您必须将此属性设置为“Int32”类型的非空值。

产生此代码的代码:

public Dictionary<string, string> GetSites()
{
    Dictionary<string, string> sitesDict = new Dictionary<string, string>();

    var sites = from r in _db.SITE
                orderby r.Name
                select r;

    foreach (var site in sites)
    {
        sitesDict.Add(site.Id.ToString(), site.Name);
    }
    return sitesDict;
}

在调试器中,错误对话框指向foreach循环,in突出显示为绿色。

此错误仅在运行时发生。

堆栈跟踪:

System.Data.Common.Internal.Materialization.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal) +292
System.Data.Common.Internal.Materialization.Shaper.GetPropertyValueWithErrorHandling(Int32 ordinal, String propertyName, String typeName) +51
lambda_method(Closure , Shaper ) +97
System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly(Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet) +218
lambda_method(Closure , Shaper ) +291
System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper) +170
System.Data.Common.Internal.Materialization.SimpleEnumerator.MoveNext() +84
ARFODataService.SearchServices.ARFOStaticValues.GetSites() in <snip>\ARFODataService\SearchServices\ARFOStaticValues.cs:22
ARFO_Stewardship.Controllers.HomeController.Index() in <snip>\ARFO_Stewardship\Controllers\HomeController.cs:31
lambda_method(Closure , ControllerBase , Object[] ) +96
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +208
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +55
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +263
System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +19
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +191
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +343
System.Web.Mvc.Controller.ExecuteCore() +116
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +97
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +50
System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8963149
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184

感谢任何帮助解决这个问题。

感谢。

1 个答案:

答案 0 :(得分:0)

第一个评论者是正确的,从错误消息看,你的数据库看起来正在说价值&#34; SiteTable.ID&#34;是一个int,但你的实体对象认为它是一个双重(或者反过来)。

尝试针对数据库刷新实体对象。