gpt4 book ai didi

c# - .AsNoTracking() 有什么区别?

转载 作者:IT王子 更新时间:2023-10-29 03:29:46 24 4
gpt4 key购买 nike

我有一个关于 .AsNoTracking() 扩展的问题,因为这是全新的而且非常困惑。

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

我的很多实体都没有改变,所以不需要跟踪,但我有以下场景,我不确定数据库中有什么,甚至不确定在这种情况下它是否有所作为。

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

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

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

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

步骤 1 和 2 使用相同的上下文,但发生在不同的时间。我无法解决的是是否有任何区别。由于第 2 步是一个更新,我猜测无论如何都会两次访问数据库。

谁能告诉我有什么区别?

最佳答案

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

关于c# - .AsNoTracking() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12211680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com