Я использую Identity в приложении ASP.NET MVC.
Моя модель идентичности (вовлеченная часть):
public class ApplicationUser : IdentityUser
{
public virtual ICollection<Group> Groups { get; set; }
}
public class Group
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<ApplicationUser> ApplicationUsers { get; set;
}
У меня есть такой пользователь:
ApplicationUser signedUser = UserManager.FindById(model.Id);
Теперь я хочу просто удалить все Group этого подписанного пользователя. Я пробовал цикл foreach, но, конечно, по мере изменения коллекции он не работает.
У меня нет метода RemoveAll() для signedUser.Groups.
Как этого добиться?
Спасибо
Да, у меня есть таблица ссылок, но поскольку я использую Identity, у меня нет сущности для этой таблицы ссылок ...





Вы должны попросить ваш unitOfWork выполнить эту работу за вас:
unitOfWork.Groups.RemoveRange(signedUser.Groups);
или если вы предпочитаете работать напрямую с dbset:
foreach(var group in signedUser.Groups)
{
db.Entry(group).State = EntityState.Deleted;
}
db.SaveChanges(); //After all the customer is deleted, Commit.
Я не хочу удалять группу, а группу ApplicationUser, и, как уже упоминалось, цикл foreach не может быть выполнен, поскольку коллекция изменяется при удалении элемента.
Тот факт, что установщик этого свойства EntityEntry 'State' является общедоступным, всегда удивлял меня - я могу только предположить, что дизайнеры EF считают, что есть законные и безопасные причины для его непосредственного изменения, хотя из документации не ясно, что (они намекают, что это может быть, если вы хотите что-то удалить без затрат на загрузку).
Думаю, я не совсем понимаю, что вы пытаетесь сделать. что вы имеете в виду, говоря «Я хочу удалить не группу, а группу ApplicationUser». Но не беспокойтесь о цикле foreach, который будет работать.
Ладно, я понял. Дело в том, что это виртуальное свойство, а на самом деле просто отношение.
Итак, чтобы удалить это отношение, мне пришлось использовать:
signedUser.Groups.Clear();
Спасибо за вашу помощь.
Предполагая, что в группе может быть несколько пользователей, и пользователи могут принадлежать к нескольким группам (отношение «многие ко многим»), у вас, вероятно, есть таблица ссылок? Если это так, и если вы хотите удалить определенного пользователя из всех групп, к которым он принадлежит, вы должны удалить записи таблицы ссылок, которые относятся к этому идентификатору пользователя.