Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET Core 3.0处理多对多关系记录的正确方法_C#_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# ASP.NET Core 3.0处理多对多关系记录的正确方法

C# ASP.NET Core 3.0处理多对多关系记录的正确方法,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,这个标题不言自明。当我创建一个新用户时,它应该将该用户添加到角色中。我的代码可以工作,但看起来有点难看。使用一个\u context.saveChangesSync()调用有更好的方法吗 public class User { public int Id { get; set; } public string FirstName { get; set; } public string MiddleName { get; set; } public string L

这个标题不言自明。当我创建一个新用户时,它应该将该用户添加到角色中。我的代码可以工作,但看起来有点难看。使用一个
\u context.saveChangesSync()调用有更好的方法吗

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." });
}
公共类用户
{
公共int Id{get;set;}
公共字符串名{get;set;}
公共字符串MiddleName{get;set;}
公共字符串LastName{get;set;}
公共字符串电子邮件{get;set;}
公共字符串密码{get;set;}
公用字符串电话{get;set;}
公共列表用户角色{get;set;}
公共列表机器人程序{get;set;}
}
公共阶级角色
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表用户角色{get;set;}
}
公共类用户角色
{
public int UserId{get;set;}
公共用户{get;set;}
public int RoleId{get;set;}
公共角色{get;set;}
}
[异名]
[HttpPost]
公共异步任务CreateUserAsync([FromBody]UserRegisterTo UserRegisterTo)
{
var user=新用户
{
FirstName=userRegisterDto.FirstName,
MiddleName=userRegisterDto.MiddleName,
LastName=userRegisterDto.LastName,
Email=userRegisterDto.Email,
Password=userRegisterDto.Password,
Phone=userRegisterDto.Phone
};
wait_context.Users.AddAsync(user);
wait_context.SaveChangesAsync();
//注意这里的代码
var user2=await\u context.Users
.Include(e=>e.UserRoles)
.然后包括(e=>e.Role)
.SingleOrDefaultAsync(e=>e.Id==user.Id);
user2.UserRoles.Add(新的UserRole{RoleId=userRegisterDto.RoleId});
_context.Users.Update(user2);
wait_context.SaveChangesAsync();
返回Ok(新建{Message=“成功注册。”});
}

尝试以下方法:

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." });
    }
public异步任务CreateUser([FromBody]UserRegisterDto UserRegisterDto)
{
var user=新用户
{
FirstName=userRegisterDto.FirstName,
MiddleName=userRegisterDto.MiddleName,
LastName=userRegisterDto.LastName,
Email=userRegisterDto.Email,
Password=userRegisterDto.Password,
Phone=userRegisterDto.Phone
};
wait_context.Users.AddAsync(user);
var role=_context.Roles.Find(userRegisterDto.RoleId);
UserRole UserRole=newuserrole{User=User,Role=Role};
_Add(userRole);
wait_context.SaveChangesAsync();
返回Ok(新建{Message=“成功注册。”});
}