Я пытаюсь добавить новую запись в таблицу ссылок, используя код entityframework. У меня есть много ко многим на User
и Role
. У меня есть сценарий, который заключается в том, что, когда я меняю роль для пользователя, я удаляю все его предыдущие роли и добавляю новые роли следующим образом:
//Delete all associated roles for user
var roleUser = db.Users.Include(r => r.Roles).FirstOrDefault(u => u.UserId == user.UserId);
var usersRoles = roleUser.Roles;
usersRoles.ForEach(role => roleUser.Roles.Remove(role));
//add the new roles
roleUser.Roles.AddRange(detachedUser.Roles);
db.SaveChanges();
Так что он удаляет их идеально. Но при добавлении новых ролей он добавляет не только таблицу ссылок, но и таблицу Role
. Абсолютно новая роль добавляется без RoleName
. user.Roles
будет содержать элемент со следующими данными:
RoleId;//1 <-- this Id exists in the database already but yet still it creates one instead of a linktable record.
RoleName;//null
Как запретить EF добавлять целую новую запись и просто добавлять запись в таблицу ссылок?
Обновление: Я закончил тем, что сделал:
var roleUser = db.Users.Include(r => r.Roles).FirstOrDefault(u => u.UserId == user.UserId);
var roles = db.Roles;
foreach (var role in roles)
{
if (user.Roles.Any(r => r.RoleId == role.RoleId))
{
roleUser.Roles.Add(role);
}
else
{
roleUser.Roles.Remove(role);
}
}
db.SaveChanges();