entity framework 删除与 EntityState.Deleted
entity framework Remove vs EntityState.Deleted
这两种说法有什么区别?
两者都应该删除一个实体。
_context.Entry(new Schoolyear { Id = schoolyearId }).State = EntityState.Deleted;
_context.Schoolyears.Remove(new Schoolyear { Id = schoolyearId });
对于那些不了解 EF 扩展的人:
_context.Schoolyears.Delete(s => s.Id == schoolyearId);
那就更酷了:D
它们是一样的,但都会失败。 EF 在内部使用 ObjectManager 来跟踪 EF 使用的所有元素。通过使用 EF 的检索功能或使用 _context.Schoolyears.Add(obj)
.
将新条目添加到 EF 来添加 ObjectManager 的条目
引用未存储在对象管理器中的条目通常会产生 InvalidOperationException
异常。以下行为类似:
Schoolyear year = context.Schoolyears.Single(x => x.Name == "2013");
_context.Schoolyears.Remove(year);
_context.SaveChanges();
或
Schoolyear year = context.Schoolyears.Single(x => x.Name == "2013");
_context.Entry(year).State = EntityState.Deleted;
_context.SaveChanges();
但是 EF 在第一种方法中做了更多的检查和状态更改活动。
如果可能的话,我总是更喜欢第一个方法。
在游戏的另一边有EntityFramework.Extended。此库允许在 EF 上下文中进行质量 updates/deletes。
此库不使用 ObjectManager,因此您可以使用
_context.Schoolyears.Delete(s => s.Id == schoolyearId);
提示:您也可以使用(首选)
_context.Schoolyears.Where(s => s.Id == schoolyearId).Delete();
警告:请确保不要在 EF 和 EF.Extended 中同时操作对象。这可能会导致不可预知的结果或异常。
这两种说法有什么区别?
两者都应该删除一个实体。
_context.Entry(new Schoolyear { Id = schoolyearId }).State = EntityState.Deleted;
_context.Schoolyears.Remove(new Schoolyear { Id = schoolyearId });
对于那些不了解 EF 扩展的人:
_context.Schoolyears.Delete(s => s.Id == schoolyearId);
那就更酷了:D
它们是一样的,但都会失败。 EF 在内部使用 ObjectManager 来跟踪 EF 使用的所有元素。通过使用 EF 的检索功能或使用 _context.Schoolyears.Add(obj)
.
引用未存储在对象管理器中的条目通常会产生 InvalidOperationException
异常。以下行为类似:
Schoolyear year = context.Schoolyears.Single(x => x.Name == "2013");
_context.Schoolyears.Remove(year);
_context.SaveChanges();
或
Schoolyear year = context.Schoolyears.Single(x => x.Name == "2013");
_context.Entry(year).State = EntityState.Deleted;
_context.SaveChanges();
但是 EF 在第一种方法中做了更多的检查和状态更改活动。
如果可能的话,我总是更喜欢第一个方法。
在游戏的另一边有EntityFramework.Extended。此库允许在 EF 上下文中进行质量 updates/deletes。
此库不使用 ObjectManager,因此您可以使用
_context.Schoolyears.Delete(s => s.Id == schoolyearId);
提示:您也可以使用(首选)
_context.Schoolyears.Where(s => s.Id == schoolyearId).Delete();
警告:请确保不要在 EF 和 EF.Extended 中同时操作对象。这可能会导致不可预知的结果或异常。