Ideen med Attach()
metoden er, at du har en enhed, der vides at være i DB, men ikke spores af denne kontekst, ikke? Mit spørgsmål til dig er, ved du med sikkerhed, at denne rolle her:
Role r = new Role { ID = 1, Name = "Members" };
er der noget der allerede eksisterer? Hvis det ikke gør det, tror jeg ikke, at du vil bruge
ctx.Roles.Attach(r);
det er snarere, at du ville skrive:
ctx.Roles.Add(r);
og så kunne man vende sig om og skrive
User u = new User {
Login = login,
Password = password,
Status = 1,
};
ctx.Users.Add(u);
u.Roles.Add(r);
ctx.SaveChanges();
Problemet med dit første eksempel er, at denne nye rolle er virkelig ny i DB'en, så at vedhæfte den er ikke det, du ønsker at gøre, men du vil gerne tilføje den.
Og det enkelte kald til ctx.SaveChanges()
burde fungere fint her.