我有一个关于.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 知道它应该更新现有用户