在实体框架查询期间修改数据库表

本文关键字:修改 数据库 实体 框架 查询 | 更新日期: 2023-09-27 18:00:40

假设我有一个实体框架上下文context,并执行以下操作:

foreach (var item in context.Set<MyObject>())
    DoSomethingThatTakesTenSeconds();
  • 执行此操作时,我可以向SSMS中的dbo.MyObject添加新行吗?如果是,它们是否在循环中被拾取
  • 执行此操作时,我可以删除SSMS中dbo.MyObject中的行吗?循环还会尝试获取它们吗
  • EF/ADO.NET堆栈的什么级别决定了这个问题的答案

在实体框架查询期间修改数据库表

当您访问IQueryable<T>中的第一个项目时,将对数据库执行查询,并将结果具体化为对象集合。对数据库的任何修改都不会更改该集合。回答您的问题:

1) 您可以添加新对象,但这些对象不会拾取。

2) 您可以删除对象,它们将处于循环中。

3) 这是IQueryable<T>的工作方式,而不是EF/ADO.NET。