它们是相同的,但都会失败。 EF 内部使用 ObjectManager 来跟踪 EF 使用的所有元素。通过使用 EF 的检索功能或通过使用以下命令向 EF 添加新条目,可以将条目添加到 ObjectManager_context.Schoolyears.Add(obj)
.
引用未存储在对象管理器中的条目通常会创建InvalidOperationException
例外情况。以下行为类似:
Schoolyear year = context.Schoolyears.Single(x => x.Name == "2013");
_context.Schoolyears.Remove(year);
_context.SaveChanges();
or
Schoolyear year = context.Schoolyears.Single(x => x.Name == "2013");
_context.Entry(year).State = EntityState.Deleted;
_context.SaveChanges();
但 EF 在第一种方法中进行了更多检查和状态更改活动。
我总是更喜欢first如果可能的话接近。
游戏的另一面是EntityFramework.扩展 https://github.com/loresoft/EntityFramework.Extended。该库允许对 EF 上下文进行批量更新/删除。
该库不使用ObjectManager,因此您可以使用
_context.Schoolyears.Delete(s => s.Id == schoolyearId);
提示:您也可以使用(首选)
_context.Schoolyears.Where(s => s.Id == schoolyearId).Delete();
Warning:请确保您不要在 EF 和 EF.Extended 中同时操作对象。这可能会导致不可预测的结果或异常。