大量のデータを取得しているサードパーティのサービスがあり、その情報をローカルデータベースに保存したいと考えています。データベースにUser、Role、UserRoleの3つのテーブルがあるとします。
- ユーザーテーブルには、UserId(PK)、UserNameのフィールドが含まれています。
- ロールテーブルには、RoleId(PK)、RoleNameのフィールドが含まれています。
- 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();
}
ユーザーとロールのテーブルに重複するレコードがない状態で、このリストをデータベース(ユーザーとロール)に挿入するにはどうすればよいですか?