我有一个关于.AsNoTracking()扩展,因为这都是非常新的并且非常令人困惑。

我正在为网站使用每个请求上下文。

我的很多实体没有改变,所以不需要跟踪,但我有以下场景,我不确定数据库会发生什么,甚至不确定在这种情况下是否会产生影响。

这个例子是我目前正在做的:

context.Set<User>().AsNoTracking()
// Step 1) Get user
context.Set<User>()
// Step 2) Update user

这与上面相同,但删除了.AsNoTracking()从步骤 1 开始:

context.Set<User>();
// Step 1) Get user
context.Set<User>()
// Step 2) Update user

步骤1

谁能告诉我有什么区别?

答案

区别在于,在第一种情况下,上下文不会跟踪检索到的用户,因此当您要将用户保存回数据库时,您必须附加它并正确设置用户状态,以便 EF 知道它应该更新现有用户

来自: stackoverflow.com