在 Entity Framework Core 上禁用 AutoDetectChanges

Rob*_*one 11 c# sql record entity-framework-core asp.net-core

有人知道如何禁用 EFCore 上的 AutoDetectChanges 吗?

我需要这样做,因为我必须在我的数据库中进行大量导入,并且无法在网上找到信息。

试过这个,但它不起作用:

_context.Configuration.AutoDetectChangesEnabled = false;
Run Code Online (Sandbox Code Playgroud)

说配置不存在。

非常感谢。

Iva*_*oev 15

你尝试过的

_context.Configuration.AutoDetectChangesEnabled = false;
Run Code Online (Sandbox Code Playgroud)

适用于 EF6。

对应的 EF Core 选项AutoDetectChangesEnabled是与DbContext关联的ChangeTracker 的属性,因此对应的代码是

_context.ChangeTracker.AutoDetectChangesEnabled = false;
Run Code Online (Sandbox Code Playgroud)


Jac*_*cob 12

我认为我之前完成的方法是在您注册 DBContext 时将其关闭,这样您就不必将其添加到每个查询中。

在我的头顶上,没有代码前。现在参考,所以我可能是错的

services.AddDbContext<YourDbContext>(options =>
{
    options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
});
Run Code Online (Sandbox Code Playgroud)

编辑:找到了。https://docs.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.dbcontextoptionsbuilder.usequerytrackingbehavior?view=efcore-3.1

很确定这就是你要找的

  • 关闭跟踪与关闭自动变化检测不同。后者通常用于“推迟”对跟踪实体的更改检测,以赢得性能。即稍后将在代码中显式执行更改检测。 (3认同)

Tim*_*ace 5

这是我熟悉的,来自文档:

var blogs = context.Blogs
    .AsNoTracking()
    .ToList();
Run Code Online (Sandbox Code Playgroud)

参考: https : //docs.microsoft.com/en-us/ef/core/querying/tracking

  • 关闭跟踪与关闭自动变化检测不同。后者通常用于“推迟”对跟踪实体的更改检测,以赢得性能。即稍后将在代码中显式执行更改检测。 (2认同)