Ответ 1
Нет изменений в том, как удалить объект между EF 4 и EF 6. Чтобы удалить объект с использованием Entity Framework, вам нужно использовать метод Remove
на DbSet
. Remove
работает как для существующих, так и для вновь добавленных объектов.
-
Вызов
Remove
объекта, который был добавлен, но еще не сохранен в базу данных будет отменено добавление объекта. Сущность удаляется из трекера изменений и больше не отслеживаетсяDbContext
. -
Вызов
Remove
для существующего объекта, который отслеживает изменения зарегистрирует объект для удаления в следующий разSaveChanges
называется.
Удаление с загрузкой из базы данных
В качестве примера, который вы видите в своем вопросе, вам нужно сначала загрузить существующий объект из контекста, чтобы удалить его. Если вы не знаете Id
, вы можете выполнить запрос, как показано ниже, чтобы найти его первым:
var report= (from d in context.StudentReportDetail
where d.ReportName == "Report"
select d).Single();
context.StudentReportDetail.Remove(report);
context.SaveChanges();
Удаление без загрузки из базы данных
Если вам нужно удалить объект, но его еще нет в памяти, его немного неэффективно, чтобы извлечь этот объект из базы данных только для его удаления. Если вам известен ключ объекта, который вы хотите удалить, вы можете прикрепить заглушку, которая представляет объект, который будет удален, а затем удалить этот заглушка. Штук - это экземпляр объекта, который имеет только присвоенное значение ключа. Ключевое значение - это все, что требуется для удаления объектов.
var toDelete = new StudentReportDetail {Id = 2 };
context.StudentReportDetail.Attach(toDelete);
context.StudentReportDetail.Remove(toDelete);
context.SaveChanges();
Другим способом может быть изменение состояния объекта до Deleted
. DbContext
имеет методы, называемые Entry
и Entry<TEntity>
, эти методы получают DbEntityEntry
для данного объекта и предоставляют доступ к информации об объекте и вернуть объект DbEntityEntry
, способный выполнить действие над сущностью. Теперь вы можете выполнить операцию удаления в контексте, просто изменив состояние объекта на EntityState.Deleted
:
var toDelete = new StudentReportDetail {Id = 2 };
context.Entry(toDelete).State = EntityState.Deleted;
context.SaveChanges();
Использование сторонней библиотеки
Существует другой способ, но использует стороннюю библиотеку, EntityFramework Plus, есть набор самородок, который вы можете установить. Вы можете использовать операцию пакетного удаления:
context.StudentReportDetail
.Where(u => u.Id== stuDetails)
.Delete();