如何使用外键将自定义对象插入到用户中

问题描述 投票:0回答:1

我目前在显示自定义对象属性时遇到问题,因为程序似乎没有使用适当的外键从表中插入关联值。 这是代码 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 上尝试了其他空引用异常修复,但没有任何效果

c# asp.net-mvc .net-6.0
1个回答
0
投票

我目前在显示自定义对象属性时遇到问题 因为该程序似乎没有插入关联的值 具有适当外键的表。这是代码 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>

输出:

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

注意:如果您想了解更多关于实体关系的细节,可以参考这个官方文档

© www.soinside.com 2019 - 2024. All rights reserved.