Het idee met de Attach()
methode is dat je een entiteit hebt waarvan bekend is dat deze zich in de DB bevindt, maar niet wordt gevolgd door deze context, toch? Mijn vraag aan jou is of je zeker weet dat deze rol hier:
Role r = new Role { ID = 1, Name = "Members" };
is er iets dat al bestaat? Als dat niet het geval is, denk ik niet dat je
. wilt gebruikenctx.Roles.Attach(r);
het is eerder zo dat je zou schrijven:
ctx.Roles.Add(r);
en dan zou je je kunnen omdraaien en schrijven
User u = new User {
Login = login,
Password = password,
Status = 1,
};
ctx.Users.Add(u);
u.Roles.Add(r);
ctx.SaveChanges();
Het probleem dat uw eerste voorbeeld heeft, is dat deze nieuwe rol echt nieuw is voor de DB, dus het toevoegen ervan is niet wat u zou willen doen, maar u zou het eerder willen toevoegen.
En de enkele aanroep van ctx.SaveChanges()
zou hier prima moeten werken.