在搜索通过EF执行CRUD操作的最佳实践时,我注意到强烈建议在更新实体之前使用Attach()
或Find()
方法。它运行良好,根据EF文档,这些方法将实体提取到上下文中,这对我来说很清楚。但后续代码很困惑我为什么使用Attach for update实体框架6?
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()
?据我所知,该记录没有以任何方式附在上下文中。我阅读了this书和the tutorial的相关章节,但他们使用2-query-approach。我也冲浪,但没有找到我的问题的答案。请帮助我解释或一些好的matherials。
谢谢,但为什么此记录目前由上下文跟踪? –
如果实体当前被跟踪并且您更改了某个属性,则由于跟踪更改,该实体的状态应该更改为'Modified',但是您的实体应该符合此要求(https://msdn.microsoft.com/ en-us/library/dd468057(v = vs.100).aspx) – octavioccl
我认为这[link](https://www.safaribooksonline.com/library/view/programming-entity-framework/9781449331825/ch04s03.html )可以回答你的所有问题 – octavioccl