gpt4 book ai didi

entity-framework - Entity Framework Remove vs EntityState.Deleted

转载 作者:行者123 更新时间:2023-12-04 07:26:29 25 4
gpt4 key购买 nike

这两个语句之间的区别是什么?

两者都应删除一个实体。

 _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上下文中进行大量更新/删除。

该库不使用ObjectManager,因此允许您使用
 _context.Schoolyears.Delete(s => s.Id == schoolyearId);

提示:您也可以使用(首选)
 _context.Schoolyears.Where(s => s.Id == schoolyearId).Delete();

警告:请确保不要在EF和EF.Extended中同时操作对象。这可能会导致不可预测的结果或异常。

关于entity-framework - Entity Framework Remove vs EntityState.Deleted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28912809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com