在寻找通过EF执行CRUD操作的最佳实践时,我注意到在更新实体之前强烈建议使用Attach()
或Find()
方法。它运行良好,并且根据EF文档,这些方法会将实体提取到上下文中,这对我来说非常清楚。但是以下代码让我感到非常困惑
public void Update(object entity)
{
Record record = new Record() {
id = 1,
value = 5
};
using (SomeContext ctx = new SomeContext())
{
ctx.Entry(record).State = EntityState.Modified;
ctx.SaveChanges();
}
}
假设有一个 ID 为 1 的记录存储在数据库中。在这种情况下,以上代码将会更新该记录(将值设置为 5)。问题是它为什么有效?那么我为什么要使用 Attach()
呢?就我所理解的来说,该记录并没有以任何方式附加到上下文中。我已阅读这本书和这个教程中相关的章节,但它们都使用了两个查询的方法。我也在 Stack Overflow 上搜索过,但没有找到答案。请帮我解释一下或提供其他好的材料,谢谢。
Attach()
呢?而且为什么这个新对象被跟踪呢?谢谢您的解释,也许我深入挖掘了太多。 - Vitalii Isaenkoctx.Entry(record)
时,DbContext 将自动查找或创建实体并将其附加到上下文。 - VyriraAttach
方法。 - ocuenca