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=“成功注册。”});
}