【问题标题】:How to prevent tracking on a newly saved entity如何防止跟踪新保存的实体
【发布时间】:2015-04-10 10:39:13
【问题描述】:

在实体框架中,无需跟踪即可轻松获取现有项目:

context.Widgets.AsNoTracking().Single(x=>x.Id == id);

如果我想添加一个新项目而不跟踪它,该怎么办?只要你这样做:

context.Widgets.Add(newWidget);

实例被跟踪。即使我从上下文中分离实例,一旦它再次附加,上下文仍然会跟踪OriginalValues 并引入并发更新等常见问题。

有没有办法:

  1. 添加新实体

和/或:

  1. 附加现有的分离实体

DbContext,同时强制执行等效的AsNoTracking 行为?

【问题讨论】:

  • 苦苦思索为什么要这样做。您可以不首先添加实体吗?或许你可以多解释一下你的场景?
  • 附加跟踪!你什么意思?你想达到什么目的?

标签: c# .net ef-code-first entity-framework-6


【解决方案1】:

试试这个:

context.Widgets.Add(newWidget);
context.SaveChanges();
context.Entry(newWidget).State = EntityState.Detached;

编辑:

具有状态特性的 DbContext 类用于跟踪数据更改。 这种方法使 EntityFramework 不适合与被设计为瞬态的类型一起使用,例如“Widget”实例。

上面的代码应该可以完成工作:重用要在“半持久”上下文中使用的数据结构,但应该通过批处理进行优化。

我之所以评论“使用 Dapper”,是因为过去我对 EF 感到非常沮丧,它产生的问题比它解决的问题多得多。使用无状态 Orm 效率更高。

【讨论】:

  • 投了反对票?好。多年来没有使用 EF,但对我来说,这回答了“如果我想添加一个新项目而不跟踪它一旦添加怎么办?”如果我犯了错误,请随时告诉我。
  • 此答案因其长度和内容而被自动标记为低质量。 Brevity is acceptable, but fuller explanations are better.
  • 哦,我明白了!不知道
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 2011-06-26
  • 1970-01-01
  • 2021-06-16
相关资源
最近更新 更多