我正在学习 EF,遇到了一些使用一对多数据库的问题。例如,我有两个表:
第一个:用户
第二:角色
例如,角色表应包含两个角色“管理员”和“超级管理员”,其 ID 应分配给用户表中的必填字段。但是当我想让三个用户设置一个已经存在的角色时,结果是“管理员”角色是重新创建的,并且用户被分配了新角色的 id。如何成为并与之合作?
用户
public class Users
{
[Key]
public int Id { get; set; }
[Required]
public string Login { get; set; }
[Required]
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public int? RoleId { get; set; }
public Role Role { get; set; }
}
角色
public class Role
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Users> UserAll { get; set; }
public Role()
{
UserAll = new List<Users>();
}
}
执行录制本身
using (AppContext db = new AppContext())
{
var role1 = new Role { Name = "Administrator" };
var user1 = new Users { Login = "admin", Password = "1231", Role = role1, Email = "test@gmail.com", FirstName = "null", LastName = "null"};
db.Users.AddRange(new List<Users>{user1});
db.SaveChanges();
}
我唯一想到的就是提前从 Role 表中下载数据,然后将其与用户输入的内容进行比较,然后才将其分配给选定的 id。
使用这一行,您可以创建一个新角色:
自然,它随后被添加到数据库中。
您需要从数据库中获取现有角色:
为防止意外创建具有相同名称的新角色,请在 Role.Name 列上放置唯一约束。这在不同版本的 EF 中以不同的方式完成。
该类
Users包含有关一个人的信息,因此名称必须为单数:User.不要以纯粹的形式将密码存储在数据库中。存储他们的哈希值,并始终使用盐。