Click here to Skip to main content
15,883,837 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
First of all I still dont understand some basics of CodeFirst relations, so that might be issue.

So I have property "SIMCardNumber" (row) in ApplicationUser table which I want to get data from and show it on view, however I'm having issue doing so. I'm unsure why cause on other tables unrelated to ApplicationUsers I had no such issues with controller code.

Project is MVC 5 with CodeFirst approach to models.

I'm getting
Object reference not set to an instance of an object.


Heres full error:

Server Error in '/' Application.

Object reference not set to an instance of an object.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error: 


Line 262:
Line 263:            
Line 264:            var sim = context.DetailsUsers
Line 265:               .Where(a => a.UserId.Id == userId)
Line 266:               .Select(a => a.SIMCardNumber).FirstOrDefault();

Source File: C:\Users\Faris\Documents\Visual Studio 2017\Projects\SmartAgro\SmartAgro\Controllers\ManageController.cs    Line: 264 

Stack Trace: 


[NullReferenceException: Object reference not set to an instance of an object.]
   SmartAgro.Controllers.ManageController.UpdateSIM() in C:\Users\Faris\Documents\Visual Studio 2017\Projects\SmartAgro\SmartAgro\Controllers\ManageController.cs:264
   lambda_method(Closure , ControllerBase , Object[] ) +62
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +157
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
   System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +22
   System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +29
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +32
   System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +50
   System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +225
   System.Web.Mvc.Async.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) +10
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +34
   System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +26
   System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +100
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27
   System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +36
   System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +22
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
   System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9765121
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.6.1586.0


What I have tried:

public ActionResult UpdateSIM()
        {
            
            var userId = User.Identity.GetUserId();

            
            var sim = context.Users
               .Where(a => a.Id == userId)
               .Select(a => a.SIMCardNumber).FirstOrDefault();

            if (sim == null)
            {
                var simtext = "You don't have any number linked to this account!";
                var view = new DetailsUserViewModel()
                {
                    SIMCardNumber = simtext
                };
                return View(view);
            }

            var viewModel = new DetailsUserViewModel()
            {
                SIMCardNumber = sim
            };
            
            return View(viewModel);
        }
Posted
Updated 3-Jul-17 2:08am
v2

1 solution

So I figured it out. Instead of context one should use UserManager to work with ApplicationUsers table so instead of

var sim = context.Users
               .Where(a => a.Id == userId)
               .Select(a => a.SIMCardNumber).FirstOrDefault();


you should use

var sim = UserManager.Users
               .Where(a => a.Id == userId)
               .Select(a => a.SIMCardNumber).FirstOrDefault();
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900