c# - EF Code First 多对多关系 - 将重复记录插入数据库

标签 c# entity-framework ef-code-first

我有一个第三方服务,我从中收集了大量数据,我想将这些信息存储在我的本地数据库中。假设我的数据库中有 3 个表 UserRoleUserRole

  1. 用户表包含以下字段 - UserId(PK)、UserName。
  2. 角色表包含​​以下字段 - RoleId(PK)、RoleName。
  3. 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/

相关文章:

c# - 使用 Entity Framework 6 中的环境变量在暂存/生产数据库之间切换

entity-framework - SQL逻辑错误或缺少数据库没有这样的功能: last_rows_affected

c# - Entity Framework 一对多问题

c# - C# 6.0 语法错误

c# - 为什么在 C# 中将 double 转换为 float 时我的精度会下降?

c# - 计算连接线数

c# - 窗口标题更改事件

mysql - asp.net Identity 2.0的Extent用户表

entity-framework - 使用 Entity Framework 4 时如何返回数据读取器?

entity-framework - EF 4.1, 继承与共享主键关联 => 指定表达式的 ResultType 不兼容