Ide dengan Attach()
metodenya adalah Anda memiliki entitas yang diketahui berada di DB tetapi tidak dilacak oleh konteks ini, bukan? Pertanyaan saya kepada Anda adalah apakah Anda tahu pasti bahwa Peran ini di sini:
Role r = new Role { ID = 1, Name = "Members" };
adalah sesuatu yang sudah ada? Jika tidak, saya rasa Anda tidak ingin menggunakan
ctx.Roles.Attach(r);
melainkan Anda akan menulis:
ctx.Roles.Add(r);
dan kemudian Anda bisa berbalik dan menulis
User u = new User {
Login = login,
Password = password,
Status = 1,
};
ctx.Users.Add(u);
u.Roles.Add(r);
ctx.SaveChanges();
Masalah yang dimiliki contoh pertama Anda adalah bahwa Peran baru ini benar-benar baru di DB sehingga melampirkannya bukanlah yang ingin Anda lakukan, melainkan Anda ingin Menambahkannya.
Dan satu panggilan ke ctx.SaveChanges()
seharusnya bekerja dengan baik di sini.