ASP.NET Core 3.0 - правильный способ обработки записей отношений «многие ко многим» - PullRequest
0 голосов
/ 02 ноября 2019

Название довольно понятно. Когда я создаю нового пользователя, он должен добавить пользователя к роли. Мой код работает, но это выглядит некрасиво. Есть ли лучший способ сделать это с помощью одного _context.SaveChangesAsync() звонка?

public class User
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
    public string Phone { get; set; }

    public List<UserRole> UserRoles { get; set; }
    public List<Bot> Bots { get; set; }
}

public class Role
{
    public int Id { get; set; }
    public string Name { get; set; }

    public List<UserRole> UserRoles { get; set; }
}

public class UserRole
{
    public int UserId { get; set; }
    public User User { get; set; }

    public int RoleId { get; set; }
    public Role Role { get; set; }
}

[AllowAnonymous]
[HttpPost]
public async Task<ActionResult> CreateUserAsync([FromBody] UserRegisterDto userRegisterDto)
{
    var user = new User
    {
        FirstName = userRegisterDto.FirstName,
        MiddleName = userRegisterDto.MiddleName,
        LastName = userRegisterDto.LastName,
        Email = userRegisterDto.Email,
        Password = userRegisterDto.Password,
        Phone = userRegisterDto.Phone
    };

    await _context.Users.AddAsync(user);
    await _context.SaveChangesAsync();

    // Note code here
    var user2 = await _context.Users
                .Include(e => e.UserRoles)
                    .ThenInclude(e => e.Role)
                .SingleOrDefaultAsync(e => e.Id == user.Id);
    user2.UserRoles.Add(new UserRole { RoleId = userRegisterDto.RoleId });
    _context.Users.Update(user2);
    await _context.SaveChangesAsync();

    return Ok(new { Message = "Successfully registered." });
}

1 Ответ

1 голос
/ 04 ноября 2019

Попробуйте следующий метод:

public async Task<ActionResult> CreateUser([FromBody] UserRegisterDto userRegisterDto)
    {
        var user = new User
        {
            FirstName = userRegisterDto.FirstName,
            MiddleName = userRegisterDto.MiddleName,
            LastName = userRegisterDto.LastName,
            Email = userRegisterDto.Email,
            Password = userRegisterDto.Password,
            Phone = userRegisterDto.Phone
        };

        await _context.Users.AddAsync(user);

        var role = _context.Roles.Find(userRegisterDto.RoleId);
        UserRole userRole = new UserRole { User = user, Role = role };
        _context.Add(userRole);

        await _context.SaveChangesAsync();

        return Ok(new { Message = "Successfully registered." });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...