gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:11:46 24 4
gpt4 key购买 nike

我有一个第三方服务,我从中收集了大量数据,我想将这些信息存储在我的本地数据库中。假设我的数据库中有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com