4

大量のデータを取得しているサードパーティのサービスがあり、その情報をローカルデータベースに保存したいと考えています。データベースにUserRoleUserRoleの3つのテーブルがあるとします。

  1. ユーザーテーブルには、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

「ロール1」という名前の3つのロールを新しくします。このレコードをロールテーブルに作成し、ユーザーに割り当てる必要があるときに取得します。

于 2013-02-05T09:25:52.423 に答える
0

以下のコードは、4つの新しいロールを作成します。2回実行すると、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 に答える