实体框架:我需要调用数据库吗.在更新记录之前附加()
本文关键字:新记录 更新 框架 数据库 调用 实体 | 更新日期: 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();
}
因此,从上下文请求实体条目也是一种方便的附加方式。