gpt4 book ai didi

c# - 如何结合 Find() 和 AsNoTracking()?

转载 作者:可可西里 更新时间:2023-11-01 02:59:05 32 4
gpt4 key购买 nike

如何在查询 EF 上下文时将 Find()AsNoTracking() 结合使用,以防止跟踪返回的对象。这是我做不到的

 _context.Set<Entity>().AsNoTracking().Find(id);

我该怎么做?我使用的是 EF 版本 6。

注意:我不想使用 SingleOrDefault()Where。我不能,因为参数 Id 是通用的,它是一个 struct,在这种情况下我不能为泛型应用运算符 ==

最佳答案

因此,除了使用 AsNoTracking(),您可以做的是 Find(),然后将其从上下文中分离出来。我相信除了跟踪实体的额外开销之外,这会为您提供与 AsNoTracking() 相同的结果。参见 EntityState获取更多信息。

var entity = Context.Set<T>().Find(id);
Context.Entry(entity).State = EntityState.Detached;
return entity;

编辑:这有一些潜在的问题,如果上下文没有加载某些关系,那么这些导航属性将不起作用,您会感到困惑和沮丧,为什么一切都返回空值!参见 https://stackoverflow.com/a/10343174/2558743获取更多信息。现在,在这些存储库上,我正在重写我需要的存储库中的 FindNoTracking() 方法。

关于c# - 如何结合 Find() 和 AsNoTracking()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34967116/

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