添加与当前用户具有多对多关系的对象
Add an object that has a many to many relationship with the current user
我有一个继承默认身份的项目和用户模型 class。
这两个共享多对多关系。
public class Project
{
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public ICollection<AppUser> users { get; set; }
}
public class AppUser : IdentityUser
{
public string DisplayName { get; set; }
public ICollection<Project> projects { get; set; }
}
在我的项目控制器中,我显示了属于当前用户的所有项目;
(我用用户id查用户)
[Authorize]
public IActionResult Index()
{
var userId = this.User.FindFirstValue(ClaimTypes.NameIdentifier);
IEnumerable<Project> objProjectList = _unitOfWork.Project.Where(userId);
return View(objProjectList);
}
并且在 post 方法上,我试图将当前用户添加到新创建的项目对象以建立这两者之间的关系,即(该用户是该项目的成员)
我使用依赖注入来注入使用我的自定义用户 class 的用户管理器(Appuser,它继承了默认的脚手架身份)
[HttpPost]
[ValidateAntiForgeryToken]
[Authorize]
public async Task<IActionResult> CreateAsync(Project obj)
{
if (ModelState.IsValid)
{
AppUser user = await _userManager.GetUserAsync(User);
obj.users.Add(user);
_unitOfWork.Project.Add(obj);
_unitOfWork.Project.Save();
return RedirectToAction("Index");
}
else
{
return View(obj);
}
}
但是我收到以下错误;
System.NullReferenceException: 'Object reference not set to an instance of an object.'
我到底做错了什么?我应该以其他方式添加用户吗?
如果有任何意见,我将不胜感激。
在您的模型设计中:
public ICollection<AppUser> users { get; set; }
ICollection
是接口,不能直接用它加东西,否则会得到NullReferenceException
。您可以创建一个实例,然后使用它来添加您想要的内容。
AppUser user = await _userManager.GetUserAsync(User);
//create an instance.
List<AppUser> users = new List<AppUser>();
users.Add(user);
obj.users = users;
_unitOfWork.Project.Add(obj);
_unitOfWork.Project.Save();
return RedirectToAction("Index");
我有一个继承默认身份的项目和用户模型 class。
这两个共享多对多关系。
public class Project
{
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public ICollection<AppUser> users { get; set; }
}
public class AppUser : IdentityUser
{
public string DisplayName { get; set; }
public ICollection<Project> projects { get; set; }
}
在我的项目控制器中,我显示了属于当前用户的所有项目; (我用用户id查用户)
[Authorize]
public IActionResult Index()
{
var userId = this.User.FindFirstValue(ClaimTypes.NameIdentifier);
IEnumerable<Project> objProjectList = _unitOfWork.Project.Where(userId);
return View(objProjectList);
}
并且在 post 方法上,我试图将当前用户添加到新创建的项目对象以建立这两者之间的关系,即(该用户是该项目的成员) 我使用依赖注入来注入使用我的自定义用户 class 的用户管理器(Appuser,它继承了默认的脚手架身份)
[HttpPost]
[ValidateAntiForgeryToken]
[Authorize]
public async Task<IActionResult> CreateAsync(Project obj)
{
if (ModelState.IsValid)
{
AppUser user = await _userManager.GetUserAsync(User);
obj.users.Add(user);
_unitOfWork.Project.Add(obj);
_unitOfWork.Project.Save();
return RedirectToAction("Index");
}
else
{
return View(obj);
}
}
但是我收到以下错误;
System.NullReferenceException: 'Object reference not set to an instance of an object.'
我到底做错了什么?我应该以其他方式添加用户吗?
如果有任何意见,我将不胜感激。
在您的模型设计中:
public ICollection<AppUser> users { get; set; }
ICollection
是接口,不能直接用它加东西,否则会得到NullReferenceException
。您可以创建一个实例,然后使用它来添加您想要的内容。
AppUser user = await _userManager.GetUserAsync(User);
//create an instance.
List<AppUser> users = new List<AppUser>();
users.Add(user);
obj.users = users;
_unitOfWork.Project.Add(obj);
_unitOfWork.Project.Save();
return RedirectToAction("Index");