如何使用 EF 6.1.1 从 table 中删除单个记录
How do i delete single record from table using EF 6.1.1
我正在使用 Entity Framework 6.1.1.
我deleting single record from table
如下,但我不确定这是唯一的方法还是可以进一步以有效的方式重写它。
有人可以分享评论吗?
原因:我问是因为早期帖子中的许多解决方案都引用了 EF 4.0 而不是使用最新版本 6.1.1。
Guid studentId = student.Id;
StudentReportDetail stuDetails = _context.StudentReportDetail.Find(studentId);
if (stuDetails != null)
{
_context.StudentReportDetail.Remove(stuDetails);
_context.SaveChanges();
}
在 EF 4 和 EF 6 之间如何删除实体没有变化。要使用 Entity Framework 删除实体,您需要在 DbSet
上使用 Remove
方法. 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();
删除而不从数据库加载
如果您需要删除一个实体,但它不在内存中,那么从数据库中检索该实体只是为了删除它的效率有点低。如果知道要删除的实体的key,可以附上一个代表要删除的实体的stub,然后删除这个stub. stub 是仅分配了键值的实体实例。 键值是删除实体所需的全部。
var toDelete = new StudentReportDetail {Id = 2 };
context.StudentReportDetail.Attach(toDelete);
context.StudentReportDetail.Remove(toDelete);
context.SaveChanges();
其他方法可能是将实体的状态更改为 Deleted
。DbContext
具有称为 Entry
和 Entry<TEntity>
的方法,这些方法获得 DbEntityEntry
给定的实体,并提供对有关实体的信息的访问,以及 return 一个能够对实体执行操作的 DbEntityEntry
对象。现在您只需将实体状态更改为 EntityState.Deleted
:
即可对上下文执行删除操作
var toDelete = new StudentReportDetail {Id = 2 };
context.Entry(toDelete).State = EntityState.Deleted;
context.SaveChanges();
使用第 3 方库
还有另一种方法,但是使用第 3 方库 EntityFramework Plus,您可以安装一个 nugget 包。您可以使用批量删除操作:
context.StudentReportDetail
.Where(u => u.Id== stuDetails)
.Delete();
我正在使用 Entity Framework 6.1.1.
我deleting single record from table
如下,但我不确定这是唯一的方法还是可以进一步以有效的方式重写它。
有人可以分享评论吗?
原因:我问是因为早期帖子中的许多解决方案都引用了 EF 4.0 而不是使用最新版本 6.1.1。
Guid studentId = student.Id;
StudentReportDetail stuDetails = _context.StudentReportDetail.Find(studentId);
if (stuDetails != null)
{
_context.StudentReportDetail.Remove(stuDetails);
_context.SaveChanges();
}
在 EF 4 和 EF 6 之间如何删除实体没有变化。要使用 Entity Framework 删除实体,您需要在 DbSet
上使用 Remove
方法. 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();
删除而不从数据库加载
如果您需要删除一个实体,但它不在内存中,那么从数据库中检索该实体只是为了删除它的效率有点低。如果知道要删除的实体的key,可以附上一个代表要删除的实体的stub,然后删除这个stub. stub 是仅分配了键值的实体实例。 键值是删除实体所需的全部。
var toDelete = new StudentReportDetail {Id = 2 };
context.StudentReportDetail.Attach(toDelete);
context.StudentReportDetail.Remove(toDelete);
context.SaveChanges();
其他方法可能是将实体的状态更改为 Deleted
。DbContext
具有称为 Entry
和 Entry<TEntity>
的方法,这些方法获得 DbEntityEntry
给定的实体,并提供对有关实体的信息的访问,以及 return 一个能够对实体执行操作的 DbEntityEntry
对象。现在您只需将实体状态更改为 EntityState.Deleted
:
var toDelete = new StudentReportDetail {Id = 2 };
context.Entry(toDelete).State = EntityState.Deleted;
context.SaveChanges();
使用第 3 方库
还有另一种方法,但是使用第 3 方库 EntityFramework Plus,您可以安装一个 nugget 包。您可以使用批量删除操作:
context.StudentReportDetail
.Where(u => u.Id== stuDetails)
.Delete();