Die Idee mit dem Attach()
Methode ist, dass Sie eine Entität haben, von der bekannt ist, dass sie sich in der DB befindet, aber nicht von diesem Kontext verfolgt wird, oder? Meine Frage an Sie ist, wissen Sie sicher, dass diese Rolle hier:
Role r = new Role { ID = 1, Name = "Members" };
ist etwas, das bereits existiert? Wenn dies nicht der Fall ist, denke ich nicht, dass Sie
verwenden möchtenctx.Roles.Attach(r);
eher würdest du schreiben:
ctx.Roles.Add(r);
und dann könntest du dich umdrehen und schreiben
User u = new User {
Login = login,
Password = password,
Status = 1,
};
ctx.Users.Add(u);
u.Roles.Add(r);
ctx.SaveChanges();
Das Problem, das Ihr erstes Beispiel hat, ist, dass diese neue Rolle wirklich neu in der Datenbank ist. Sie möchten sie also nicht anhängen, sondern hinzufügen.
Und der einzelne Aufruf von ctx.SaveChanges()
sollte hier gut funktionieren.