• 基础保存
    • 添加数据
    • 更新数据
    • 删除数据
    • SaveChanges 中的多操作

    基础保存

    学习如何使用上下文实例和实体类型添加、修改和删除数据。

    提示

    你可以在 GitHub 上查阅当前文章涉及的代码样例。

    添加数据

    使用 DbSet.Add 方法可以添加实体类型的新实例,当你调用 SaveChanges 的时候,数据会被插入到数据库。

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

    更新数据

    EF 会自动检测对上下文跟踪的已有实体的变更。这包括你从数据库加载/查询的实体,以及之前已添加和保存到数据库的实体。

    对属性进行简单地指派以给它赋值,然后调用 SaveChanges

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

    删除数据

    使用 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 中的多操作

    可以在单次 SaveChanges 调用中组合使用 Add / Update / Remove 操作。

    注意

    对于大部分数据库提供程序,SaveChanges 是事务性的。这意味着所有操作不是全部成功就是全部失败,不会部分有效。

    1. using (var context = new BloggingContext())
    2. {
    3. // seeding database
    4. context.Blogs.Add(new Blog { Url = "http://sample.com/blog" });
    5. context.Blogs.Add(new Blog { Url = "http://sample.com/another_blog" });
    6. context.SaveChanges();
    7. }
    8. using (var context = new BloggingContext())
    9. {
    10. // add
    11. context.Blogs.Add(new Blog { Url = "http://sample.com/blog_one" });
    12. context.Blogs.Add(new Blog { Url = "http://sample.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. }