Это ничего не может спасти. Attach
помещает весь граф объекта в контекст, но в состоянии Unchanged
. Если все объекты в контексте неизменны, SaveChanges
не будет выдавать команду БД (потому что для EF ничего не изменилось).
Если вы хотите внести изменения, которые EF распознает как таковые, вы должны сначала присоединить объект, который представляет состояние в БД, а затем внести изменения, например:
using (var helper = new DbContext())
{
helper.Users.Attach(user);
helper.Roles.Attach(myNewRole);
user.Name = myNewName;
user.Roles.Add(myNewRole);
// etc.
helper.SaveChanges();
}
Также вы можете пометить пользователя как измененного:
helper.Entry(user).State = EntityState.Modified;
Но я считаю, что это влияет только на скалярные свойства объекта, и это не решает проблему добавления новой роли пользователю.