实体框架:我需要调用数据库吗.在更新记录之前附加()

本文关键字:新记录 更新 框架 数据库 调用 实体 | 更新日期: 2023-09-27 18:24:03

我在阅读一个流行的实体框架教程时看到了这个代码片段:

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()。这是代码中的错误吗?还是总是没有必要?

实体框架:我需要调用数据库吗.在更新记录之前附加()

从这里开始:

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

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

因此,从上下文请求实体条目也是一种方便的附加方式。