我正在尝试从Customer.cs类访问ApplicationUser.cs中的属性。我不断收到null错误。在运行应用程序并尝试显示所有用户之前,我没有任何错误。错误发生在ApplicationUser.BusinessName
Customer.cs
public class Customer
{
[Key, ForeignKey("ApplicationUser")]
public string CustomerUserId { get; set; }
public virtual ApplicationUser ApplicationUser { get; set; }
public string BizName
{
get
{
return ApplicationUser.BusinessName;
}
}
}
ApplicationUser.cs
public class ApplicationUser : IdentityUser
{
public virtual Customer Customer { get; set; }
[Display(Name = "Organization")]
public string BusinessName { get; set; }
....
}
NullReferenceException:对象引用未设置为对象的实例。
AdminUsers控制器
public class AdminUsersController : Controller
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly RoleManager<ApplicationRole> _roleManager;
private readonly ApplicationDbContext _db;
public AdminUsersController(ApplicationDbContext db, RoleManager<ApplicationRole> roleManger, UserManager<ApplicationUser> userManager)
{
_userManager = userManager;
_roleManager = roleManger;
_db = db;
}
public async Task<IActionResult> Index Customer customer)
{
var users = from u in _userManager.Users.Include(u => u.Orders).Include(u => u.UserRoles).ThenInclude(ur => ur.Role) select u;
return View( users.Include(u => u.Customer).Include(u => u.Orders).ToPagedList(pageNumber, pageSize));
}
答案 0 :(得分:1)
当您从数据库中查询ApplicationUser
对象时,需要包括子实体(在这种情况下为Customer
)。
即:用于从数据库中查询单个Customer
:
_context.Customers.Include(x => x.ApplicationUser).Single(y => y.Id == myCustomerId)
或全部/多个:
_context.Customers.Include(x => x.ApplicationUser).ToList();
不执行此操作,您将看到要注意的确切症状。数据库具有有效的数据和有效的外键关联,但是尽管在查询数据后具有有效的外键(在这种情况下为CustomerUserId
,但您的复杂子对象为null。
空引用异常本身是上述问题的症状。 ApplicationUser
不包含在查询的数据中,因此它保持为空,然后您尝试访问空对象上的属性,并导致空引用异常。
如果您包含用于在帖子中获取Customer
的实际查询,那么我可以为您提供实际更新的查询,您需要在每个ApplicationUser
上包含Customer
对象对象。