为什么要使用附件来更新Entity Framework 6?

维塔利(Vitalii Isaenko)

在搜索通过EF执行CRUD操作的最佳方法时,我注意到强烈建议在更新实体之前使用Attach()Find()方法。它运作良好,并且根据EF文档,这些方法将实体获取到对我来说很清楚的上下文。但是followind代码使我非常困惑

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()据我了解,该记录没有以任何方式附加到上下文。我读到的有关章节本书和教程,但他们使用2查询的方法。我也冲浪,但没有找到我的问题的答案。请给我提供解释或一些好的数学知识。

八叶球菌

如果您知道数据库中已经存在一个实体,但是上下文当前尚未跟踪该实体(在您的情况下是正确的),则可以使用Attachon方法告诉上下文跟踪该实体DbSet因此,总而言之,Attach方法是在上下文中跟踪实体并将其状态更改为Unchanged在此之后修改属性时,跟踪更改将为您更改其状态Modified在上面公开的情况下,您明确地告诉状态是,Modified而且还将实体附加到上下文。您可以在这篇文章中找到详细的解释

什么时候应该使用Attach方法?

当您拥有一个已知已经存在于数据库中但想要进行一些更改的实体时:

var entity= new Entity{id=1};
context.YourDbSet.Attach(entity); 

// Do some change...  
entity.value=5;

context.SaveChanges(); 

这是一样的:

 context.Entry(entity).State = EntityState.Unchanged; 

// Do some change... 
entity.value=5; 

context.SaveChanges(); 

何时应将实体的状态显式更改为已修改?

当您拥有一个数据库中已经知道的实体,但是那时已经进行了更改。您的示例相同的情况

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

最新的Dapper VS Entity Framework 6性能注意事项

EntityDataSource和Entity Framework 6

如何使Entity Framework 6在CSDL中使用SQL STUFF函数?

如何在Asp.Net 5(MVC 6)中使用Entity Framework 6.x

Entity Framework 6产生的效率低下的查询

在Entity Framework 6中使用存储库模式更新记录

在Entity Framework 6中使用SqlQuery <Dictionary <string,string >>

从Entity Framework 6中的集合中删除

哪种逻辑确定Entity Framework 6的插入顺序

使用Entity Framework 6无法获得存储过程结果

在Entity Framework 6中更新子对象

使用Entity Framework 6时要处理的异常

为什么在使用Entity Framework 6.x通过SqlQuery从视图中获取数据时,为什么不使用我的ColumnAttribute?

如何使用.include查询强制外部联接Entity Framework 6

使用Entity Framework 6对多个对象进行SQL查询

在SQL CLR中使用Entity Framework 6 / EF Core

如何使用Entity Framework 6创建内存DbContext?

创建用于Entity Framework 6的表达式

实体未使用Entity Framework 6在数据库中更新

如何使用Entity Framework 6更新具有唯一列的表上的条目

如何模拟Entity Framework 6异步方法?

使用MVC 5和Entity Framework 6进行挣扎

使用Entity Framework 6提前加载孙对象

使用Entity Framework 6重构代码以遵循TDD

具有Distinct过滤器的Entity Framework 6查询

使用SQLite和Entity Framework 6时导航属性错误

如何使用Entity Framework 6调用SQL Server过程

Entity Framework v6 中的 TPC

使用 Entity Framework 6 插入断开的相关实体