4

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

  1. User 表包含以下字段 - UserId(PK)、UserName。
  2. 角色表包含​​以下字段 - RoleId(PK)、RoleName。
  3. UserRole 表包含以下字段 - UserId(FK),RoleId(FK)。

所以用户和角色表之间存在多对多关系。

当我尝试将以下记录保存到数据库时,它会在角色表中生成重复记录。

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();
}

如何将此列表插入数据库(用户和角色),而用户角色表中没有任何重复记录?

4

3 回答 3

3

我猜这些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();
于 2013-02-05T09:28:29.827 回答
0

您正在新建 3 个名为“角色 1”的角色,我将在角色表中创建此记录,并在您需要将其分配给用户时简单地检索它。

于 2013-02-05T09:25:52.423 回答
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();
}

顺便说一句,你的 RoleId 怎么样?

于 2013-02-05T09:29:41.573 回答