基本保存Basic Save

了解如何使用上下文和实体类添加、修改和删除数据。

提示

可在 GitHub 上查看此文章的示例

添加数据Adding Data

使用 DbSet.Add 方法添加实体类的新实例。 调用 SaveChanges 时,数据将插入到数据库中。

  1. using (var context = new BloggingContext())
  2. {
  3. var blog = new Blog { Url = "http://example.com" };
  4. context.Blogs.Add(blog);
  5. context.SaveChanges();
  6. }

提示

添加、附加和更新方法全部呈现在传递给这些方法的实体的完整关系图上,如相关数据部分中所述。 此外,还可以使用 EntityEntry.State 属性仅设置单个实体的状态。 例如,context.Entry(blog).State = EntityState.Modified

更新数据Updating Data

EF 将自动检测对由上下文跟踪的现有实体所做的更改。 这包括从数据库加载/查询的实体,以及之前添加并保存到数据库的实体。

只需通过赋值来修改属性,然后调用 SaveChanges 即可。

  1. using (var context = new BloggingContext())
  2. {
  3. var blog = context.Blogs.First();
  4. blog.Url = "http://example.com/blog";
  5. context.SaveChanges();
  6. }

删除数据Deleting Data

使用 DbSet.Remove 方法删除实体类的实例。

如果实体已存在于数据库中,则将在“SaveChanges” 期间删除该实体。 如果实体尚未保存到数据库(即跟踪为“已添加”),则在调用SaveChanges时,该实体会从上下文中移除且不再插入。

  1. using (var context = new BloggingContext())
  2. {
  3. var blog = context.Blogs.First();
  4. context.Blogs.Remove(blog);
  5. context.SaveChanges();
  6. }

单个 SaveChanges 中的多个操作Multiple Operations in a single SaveChanges

可以将多个添加/更新/删除操作合并到对“SaveChanges” 的单个调用。

备注

对于大多数数据库提供程序,“SaveChanges” 是事务性的。 这意味着所有操作将一起成功或一起失败,绝不会部分的应用这些操作。

  1. using (var context = new BloggingContext())
  2. {
  3. // seeding database
  4. context.Blogs.Add(new Blog { Url = "http://example.com/blog" });
  5. context.Blogs.Add(new Blog { Url = "http://example.com/another_blog" });
  6. context.SaveChanges();
  7. }
  8. using (var context = new BloggingContext())
  9. {
  10. // add
  11. context.Blogs.Add(new Blog { Url = "http://example.com/blog_one" });
  12. context.Blogs.Add(new Blog { Url = "http://example.com/blog_two" });
  13. // update
  14. var firstBlog = context.Blogs.First();
  15. firstBlog.Url = "";
  16. // remove
  17. var lastBlog = context.Blogs.Last();
  18. context.Blogs.Remove(lastBlog);
  19. context.SaveChanges();
  20. }