小编典典

.AsNoTracking()有什么区别?

c#

我对.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和步骤2使用相同的上下文,但发生在不同的时间。我无法解决的是是否有任何区别。由于第2步是更新,因此我猜两者都将两次访问数据库。

谁能告诉我有什么区别?


阅读 257

收藏
2020-05-19

共1个答案

小编典典

区别在于,在第一种情况下,上下文不跟踪检索到的用户,因此当您要将用户保存回数据库时,必须附加它并正确设置用户状态,以便EF知道它应该更新现有用户而不是插入一个新的。在第二种情况下,如果使用相同的上下文实例加载和保存用户,则无需这样做,因为跟踪机制会为您处理该情况。

2020-05-19