У меня есть следующий код:Удалить объект с соответствующими субъектами в EntityFramework
[HttpPost]
public ActionResult Eliminar(Usuario usuario)
{
db.Usuarios.Attach(usuario);
usuario.Transacciones.ToList().ForEach(t => db.Transacciones.Remove(t));
usuario.Eventos.ToList().ForEach(e => db.Eventos.Remove(e));
db.Usuarios.Remove(usuario);
db.SaveChanges();
return RedirectToAction("Index");
}
Я не могу заставить его работать. Я знаю, что для удаления сущности, которую вы сначала должны ее прикрепить, она не работает для объекта, который имеет отношения. Я также попытался сделать цикл foreach
и прикреплять каждый объект Transaccion
и Evento
, прежде чем удалять их, но он не работает.
Это ошибка InnerException
содержит:
System.Data.SqlClient.SqlException: The DELETE statement conflicted with the REFERENCE constraint "FK_TR_US". The conflict occurred in database "bd_dm", table "dbo.Transacciones", column 'idUsuario'. The statement has been terminated.
Я знаю, что это значит, но я не знаю, как сделать код работы. Мне нужно сначала удалить все Transacciones
и Eventos
, связанные с Usuario
, чтобы удалить Usuario
.
Включена ли в комплекте ленивая загрузка? Я имею в виду: 'usario.Transacciones.ToList()' возвращает правильные строки? –
Попробуйте вызвать 'SaveChanges()' _before_, удалив 'Usario', после чего снова вызываем' SaveChanges'. Или включите RI в базе данных. –
@NicholasButler, я загружаю его с помощью Usuario usuario = db.Usuarios . Включить («Транзакционные») . Включить («Eventos») . Где (u => u.id == id) .Single(); –