我目前在显示自定义对象属性时遇到问题,因为程序似乎没有使用适当的外键从表中插入关联值。 这是代码 UserViewModel.cs
public class UserViewModel
{
public string Name { get; set; }
public string Id { get; set; }
public Department Department { get; set; }
}
AppUser.cs
public class AppUser : IdentityUser
{
[DefaultValue(null)]
public string Name { get; set; }
public Department Department { get; set; }
public Single1 Single { get; set; }
}
控制器
public async Task<IActionResult> Index()
{
IEnumerable<AppUser> users = await _userRepository.GetAll();
List<UserViewModel> usersViewModel = new List<UserViewModel>();
foreach (var user in users)
{
var userViewModel = new UserViewModel()
{
Id = user.Id,
Name = user.Name,
Department = await _userRepository.GetDepartmentByIdAsync(user.Department.DepartmentId),
};
usersViewModel.Add(userViewModel);
}
return View(usersViewModel);
}
存储库
public async Task<IEnumerable<AppUser>> GetAll()
{
var users = await _context.Users.ToListAsync();
return users;
}
public async Task<Department> GetDepartmentByIdAsync(string id)
{
return await _context.Departments.Where(o => o.DepartmentId == id).FirstOrDefaultAsync();
}
如果还有什么需要请评论
我在 google 和 youtube 上尝试了其他空引用异常修复,但没有任何效果
我目前在显示自定义对象属性时遇到问题 因为该程序似乎没有插入关联的值 具有适当外键的表。这是代码 UserViewModel.cs
根据您的代码和描述以及屏幕截图,由于用户部门数据的存储方式存在问题,您无法显示
Department
的 AppUsers
信息。
我已尝试调查您的问题,如果您想获取与AppUser关联的部门,可以按照以下步骤操作。
创建或更新AppUser时,请确保将DepartmentId属性设置为相应部门的主键(DepartmentId)。
除此之外,请确保
AppUser
和 Department
在数据库上下文中定义了正确的 一对多 或 多对一关系。
让我们看一下实现,我们如何实现这一目标:
型号:
public class AppUser : IdentityUser
{
public string Id { get; set; }
public string Name { get; set; }
public string DepartmentId { get; set; }
public Department Department { get; set; }
}
public class Department
{
[Key]
public string DepartmentId { get; set; }
public string DepartmentName { get; set; }
}
视图模型:
public class UserViewModel
{
public string Id { get; set; }
public string Name { get; set; }
public Department Department { get; set; }
}
存储库:
public async Task<IEnumerable<AppUser>> GetAllWithDepartmentsAsync()
{
var users = await _context.Users
.Include(u => u.Department)
.ToListAsync();
var appUsers = users.Select(u => new AppUser
{
Id = u.Id,
Name = u.UserName,
Department = u.Department,
});
return appUsers;
}
控制器:
public async Task<IActionResult> Index()
{
var users = await _userRepository.GetAllWithDepartmentsAsync();
var usersViewModel = users.Select(user => new UserViewModel
{
Id = user.Id,
Name = user.Name,
Department = user.Department
}).ToList();
return View(usersViewModel);
}
查看:
@model List<UserViewModel>
<table class="table">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Department</th>
</tr>
</thead>
<tbody>
@foreach (var user in Model)
{
<tr>
<td>@user.Id</td>
<td>@user.Name</td>
<td>@user.Department.DepartmentName</td>
</tr>
}
</tbody>
</table>
输出: