1

我有一个实体:

public virtual int RecommendedUserId { get; set; }
public virtual string Firstname { get; set; }
public virtual string Surname { get; set; }
public virtual string Email { get; set; }
public virtual string JobTitle { get; set; }
public virtual DateTime? DateAndTimeProcessed { get; set; }
public virtual DateTime? DateAndTimeRecommended { get; set; }
public virtual string ReasonForRejection { get; set; }

//  User also an entity and has property UserId
public virtual User RecommendedByUser { get; set; }
public virtual User AssignedToUser { get; set; }

在我的控制器中,我有:

   Entities.RecommendedUser user = new RecommendedUser();
   user.Firstname = model.Firstname;
   user.Surname = model.Surname;
   user.Email = model.Email;
   user.JobTitle = model.JobTitle;

   // why am i getting the Object reference not set to 
   // an instance of an object error??
   user.RecommendedByUser.UserId = CurrentUser.UserId;  

如果我实例化RecommendedUser我也不实例化UserRecommendedUser

4

4 回答 4

3

您没有实例化RecommendedByUserof user; 你只是在实例化user.

   user.Firstname = model.Firstname;
   user.Surname = model.Surname;
   user.Email = model.Email;
   user.JobTitle = model.JobTitle;
   user.RecommendedByUser = new RecommendedUser(); // or whatever the exact type is, maybe just User
   user.RecommendedByUser.UserId = CurrentUser.UserId; 
于 2013-04-26T08:38:17.777 回答
2

值类型使用类进行初始化。但是,子对象可以NULL是引用类型。这些对象需要先初始化,然后才能分配给属性。

我假设您正在使用像实体框架这样的技术。像这样的框架允许您预取这些对象,以便在您从数据源获取实体时获取(并初始化)它们。但是,在创建新对象时,您需要自己创建它们。

于 2013-04-26T08:41:23.167 回答
0

在 EntityFramework 的情况下,有延迟加载功能。在您的特定情况下不适用,因为 EF 上下文未跟踪您的对象。延迟加载(然后是自动实例化)仅在您的对象被跟踪时才处于活动状态。

该线程可能具有指导意义。

于 2013-04-26T08:47:45.410 回答
0

您应该始终首先检查空值,例如:

if(user.Firstname != null)
{
  user.Firstname = model.Firstname;
}

避免空指针异常

于 2013-04-26T08:49:07.100 回答