ASP.NET MVC4 lambda表达式错误 - 未将对象引用设置为对象的实例

时间:2014-04-17 17:28:42

标签: asp.net asp.net-mvc asp.net-mvc-4 lambda object-reference

我在第146行继续收到此错误。我很感激有人向我解释此错误。


'/'应用程序中的服务器错误。

对象引用未设置为对象的实例。

说明:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。

来源错误

Line 144:            var courses = dc.Courses.ToList().  
Line 145:                Where(course =>  
Line 146:                    course.   <------??????
Line 147:                    User. 
Line 148:                    Id ==   
Line 149:                    currentUserId);

源文件:c:\ aaa \ vat \ c#\ proj \ igoryen \ igoryen \ ViewModels \ Repo_Course.cs行:146

堆栈跟踪

[NullReferenceException: Object reference not set to an instance of an object.]
   igoryen.ViewModels.<>c__DisplayClassb.<getListOfCourseBaseAM>b__a(Course course) in c:\aaa\vat\c#\proj\igoryen\igoryen\ViewModels\Repo_Course.cs:146
   System.Linq.WhereListIterator`1.MoveNext() +56
   System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +381
   System.Linq.Enumerable.ToList(IEnumerable`1 source) +58
   AutoMapper.Mappers.EnumerableMapperBase`1.Map(ResolutionContext context, IMappingEngineRunner mapper) +273
   AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext context) +838

[AutoMapperMappingException: 

Mapping types:
WhereListIterator`1 -> IEnumerable`1
System.Linq.Enumerable+WhereListIterator`1[[igoryen.Models.Course, igoryen, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> System.Collections.Generic.IEnumerable`1[[igoryen.ViewModels.CourseBase, igoryen, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]

Destination path:
IEnumerable`1

Source value:
System.Linq.Enumerable+WhereListIterator`1[igoryen.Models.Course]]
   AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext context) +936
   AutoMapper.MappingEngine.Map(Object source, Type sourceType, Type destinationType, Action`1 opts) +196
   AutoMapper.MappingEngine.Map(Object source, Action`1 opts) +172
   AutoMapper.MappingEngine.Map(Object source) +121
   AutoMapper.Mapper.Map(Object source) +107
   igoryen.ViewModels.Repo_Course.getListOfCourseBaseAM(String currentUserId) in c:\aaa\vat\c#\proj\igoryen\igoryen\ViewModels\Repo_Course.cs:151
   igoryen.ViewModels.Repo_Course.getSelectListOfCourse(String currentUserId) in c:\aaa\vat\c#\proj\igoryen\igoryen\ViewModels\Repo_Course.cs:136
   igoryen.Controllers.CancellationsController.Create() in c:\aaa\vat\c#\proj\igoryen\igoryen\Controllers\CancellationsController.cs:50
   lambda_method(Closure , ControllerBase , Object[] ) +101
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +59
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +435
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +60
   System.Web.Mvc.Async.ActionInvocation.InvokeSynchronousActionMethod() +76
   System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__36(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +36
   System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +73
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +136
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +102
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +49
   System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3c() +117
   System.Web.Mvc.Async.<>c__DisplayClass45.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3e() +323
   System.Web.Mvc.Async.<>c__DisplayClass30.<BeginInvokeActionMethodWithFilters>b__2f(IAsyncResult asyncResult) +44
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +47
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +136
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +102
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +50
   System.Web.Mvc.Async.<>c__DisplayClass28.<BeginInvokeAction>b__19() +72
   System.Web.Mvc.Async.<>c__DisplayClass1e.<BeginInvokeAction>b__1b(IAsyncResult asyncResult) +185
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +42
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +133
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +40
   System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +34
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +44
   System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +39
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +62
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +39
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +39
   System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__4(IAsyncResult asyncResult, ProcessRequestState innerState) +39
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +40
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +38
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9514928
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.0.30319.18446


更新1

这就是我对用户所拥有的:

// 1) Peter teaches IPC144
Course c = new Course();  
c.CourseCode = "IPC144";  
c.CourseName = "Introduction into programming";  
c.RoomNumber = "1000";      
c.RunTime = "1000";  
c.Faculty = f;  
c.User = UserPeter; // 17  
f.Courses.Add(c); //  
c.Students.Add(bob);  
bob.Courses.Add(c);  
dc.Courses.Add(c);  
c = null;

更新2

不幸的是,我无法在此处发布屏幕截图,但我正在使用断点进行调试,但我看不到User的任何null值。


更新3

我有这些文件:

  • Models/Initializer.cs我初始化所有列表/表格。
  • ViewModels/Repo_Course.cs我有查询的方法(返回错误)。

我没有得到的部分是这样的:
当我用断点调试时,我看到了:

    Models/Initializer.cs初始化Course时,{li>在User中,null有一个值而不是ViewModels/Repo_Course.cs。 第146行User中的
  • (如上所示),nullUserPeter!为什么???

更新4

ApplicationUser 的类型为var UserPeter = new ApplicationUser(); string userPw8 = "123456"; var userInfo8 = new MyUserInfo() { FirstName = "Peter", LastName = "Peterson" }; UserPeter.UserName = "Peter"; UserPeter.HomeTown = "Toronto"; UserPeter.MyUserInfo = userInfo8; var UserPeterCreate = UserManager.Create(UserPeter, userPw8); if (UserPeterCreate.Succeeded) { var addUserPeterToRole3Result = UserManager.AddToRole(UserPeter.Id, roleName3); }

ApplicationUser

IdentityUser 类,它来自public class ApplicationUser : IdentityUser { //[Key] //public int Id { get; set; } public string HomeTown { get; set; } //public virtual ICollection<Cancellation> Cancellations { get; set; } //public virtual ICollection<Course> Courses { get; set; } public virtual MyUserInfo MyUserInfo { get; set; } }

MyUserInfo

public class MyUserInfo { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } }

IdentityUser

public class IdentityUser : IUser { public IdentityUser(); public IdentityUser(string userName); public virtual ICollection<IdentityUserClaim> Claims { get; } public virtual string Id { get; set; } public virtual ICollection<IdentityUserLogin> Logins { get; } public virtual string PasswordHash { get; set; } public virtual ICollection<IdentityUserRole> Roles { get; } public virtual string SecurityStamp { get; set; } public virtual string UserName { get; set; } } 类(来自元数据):

Course

public class Course { // 10 public Course() { this.Faculty = new Faculty(); this.Students = new List<Student>(); } [Key] public int CourseId { get; set; } public string CourseCode { get; set; } public string CourseName { get; set; } public string RoomNumber { get; set; } public string RunTime { get; set; } public Faculty Faculty { get; set; } public List<Student> Students { get; set; } public virtual ApplicationUser User { get; set; } } 类:

{{1}}

2 个答案:

答案 0 :(得分:0)

User对象列表中的一个值为null。

答案 1 :(得分:0)

如果第146行执行空访问,则courses列表中包含null值的可能性高于某些具有null用户的课程。