我有第三方服务,我从中获取了大量数据,我想将这些信息存储在我的本地数据库中。假设我的数据库中有3个表用户,角色和 UserRole 。
因此,用户和角色表之间存在多对多关系。
当我尝试将以下记录保存到数据库时,它会在角色表中生成重复记录。
using (CFAContext context = new CFAContext())
{
context.Users.Add(new User { UserName = "User 1", Roles = new List<Role> { new Role { RoleName = "Role 1" }, new Role { RoleName = "Role 2" }, new Role { RoleName = "Role 3" } } });
context.Users.Add(new User { UserName = "User 2", Roles = new List<Role> { new Role { RoleName = "Role 1" }, new Role { RoleName = "Role 2" } } });
context.Users.Add(new User { UserName = "User 3", Roles = new List<Role> { new Role { RoleName = "Role 1" }, new Role { RoleName = "Role 4" } } });
context.SaveChanges();
}
如何将此列表插入数据库(用户和角色),而用户和角色表中没有任何重复记录?
答案 0 :(得分:3)
我猜RoleId
字段是唯一标识符,因此对于您添加的每个角色,当您创建新{{1}时,您将在数据库中获得具有不同RoleId
字段的新记录实例。
如果您将代码更改为以下代码,它将起作用;
Role
答案 1 :(得分:0)
您正在使用名称“Role 1”创建3个角色,我将在角色表中创建此记录,并在需要将其分配给用户时进行检索。
答案 2 :(得分:0)
下面的代码会创建4个新角色。如果执行两次,db中将有8个角色。如果您不希望在其他执行中复制角色,则应从上下文中选择它们。
using (CFAContext context = new CFAContext())
{
var roles = new List<Role> {
new Role { RoleName = "Role 1" },
new Role { RoleName = "Role 2" },
new Role { RoleName = "Role 3" },
new Role { RoleName = "Role 4" }
};
context.Users.Add(new User { UserName = "User 1", Roles = new List<Role> { roles[0], roles[1], roles[2] } });
context.Users.Add(new User { UserName = "User 1", Roles = new List<Role> { roles[0], roles[1] } });
context.Users.Add(new User { UserName = "User 1", Roles = new List<Role> { roles[0], roles[3] } });
context.SaveChanges();
}
BTW你的RoleId怎么样?