实体框架:在更新记录之前是否需要调用db.Attach()?

时间:2014-09-23 18:59:20

标签: c# .net entity-framework

当我阅读流行的实体框架教程时,我遇到了这段代码:

Student stud ;
// Get student from DB
using (var ctx = new SchoolDBEntities())
{
    stud = ctx.Students.Where(s => s.StudentName == "New Student1").FirstOrDefault<Student>();
}

// change student name in disconnected mode (out of DBContext scope)
if (stud != null)
{
    stud.StudentName = "Updated Student1";
}

//save modified entity using new DBContext
using (var dbCtx = new SchoolDBEntities())
{
    //Mark entity as modified
    dbCtx.Entry(stud).State = System.Data.EntityState.Modified;    
    dbCtx.SaveChanges();
}

我的问题是:在将实体标记为已修改之前,我们是否需要调用ctx.students.Attach(stud)

我知道Attach()只是将实体附加到上下文中,就像从数据库中读取它一样,这已经在代码的开头完成了。

但在此代码示例中,更新学生时,会创建新的上下文。因此在我看来,我们需要致电Attach()。这是代码中的错误吗?还是总是没必要?

1 个答案:

答案 0 :(得分:0)

来自here

将现有但已修改的实体附加到上下文

var existingBlog = new Blog { BlogId = 1, Name = "ADO.NET Blog" };  
using (var context = new BloggingContext()) 
{ 
    context.Entry(existingBlog).State = EntityState.Modified; 
    context.SaveChanges(); 
}

因此,从上下文请求实体输入也是附加它的便捷方式。