我有一个第三方服务,我从中收集了大量数据,我想将这些信息存储在我的本地数据库中。假设我的数据库中有 3 个表 User、Role 和 UserRole。
- 用户表包含以下字段 - UserId(PK)、UserName。
- 角色表包含以下字段 - RoleId(PK)、RoleName。
- UserRole 表包含以下字段 - UserId(FK)、RoleId(FK)。
因此 User 和 Role 表之间存在多对多关系。
当我尝试将以下记录保存到数据库时,它会在 Role 表中生成重复记录。
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();
}
如何将此列表插入数据库(用户和角色),而不在用户 和角色 表中有任何重复记录?
最佳答案
我猜 RoleId
字段是唯一标识符,因此对于您添加的每个角色,您将在数据库中获得一条新记录,其中包含与您一样的不同 RoleId
字段创建一个新的 Role
实例。
如果您将代码更改为以下内容,它将起作用;
Role role1 = new Role { RoleName = "Role 1" }
Role role2 = new Role { RoleName = "Role 2" }
Role role3 = new Role { RoleName = "Role 3" }
Role role4 = new Role { RoleName = "Role 4" }
context.Users.Add(new User { UserName = "User 1", Roles = new List<Role> { role1, role2, role3 } });
context.Users.Add(new User { UserName = "User 2", Roles = new List<Role> { role1,role2 } });
context.Users.Add(new User { UserName = "User 3", Roles = new List<Role> { role1, role4 } });
context.SaveChanges();
关于c# - EF Code First 多对多关系 - 将重复记录插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14703885/