基本保存Basic Save
了解如何使用上下文和实体类添加、修改和删除数据。
提示
可在 GitHub 上查看此文章的示例。
添加数据Adding Data
使用 DbSet.Add 方法添加实体类的新实例。 调用 SaveChanges 时,数据将插入到数据库中。
using (var context = new BloggingContext())
{
var blog = new Blog { Url = "http://example.com" };
context.Blogs.Add(blog);
context.SaveChanges();
}
提示
添加、附加和更新方法全部呈现在传递给这些方法的实体的完整关系图上,如相关数据部分中所述。 此外,还可以使用 EntityEntry.State 属性仅设置单个实体的状态。 例如,context.Entry(blog).State = EntityState.Modified
。
更新数据Updating Data
EF 将自动检测对由上下文跟踪的现有实体所做的更改。 这包括从数据库加载/查询的实体,以及之前添加并保存到数据库的实体。
只需通过赋值来修改属性,然后调用 SaveChanges 即可。
using (var context = new BloggingContext())
{
var blog = context.Blogs.First();
blog.Url = "http://example.com/blog";
context.SaveChanges();
}
删除数据Deleting Data
使用 DbSet.Remove 方法删除实体类的实例。
如果实体已存在于数据库中,则将在“SaveChanges” 期间删除该实体。 如果实体尚未保存到数据库(即跟踪为“已添加”),则在调用SaveChanges时,该实体会从上下文中移除且不再插入。
using (var context = new BloggingContext())
{
var blog = context.Blogs.First();
context.Blogs.Remove(blog);
context.SaveChanges();
}
单个 SaveChanges 中的多个操作Multiple Operations in a single SaveChanges
可以将多个添加/更新/删除操作合并到对“SaveChanges” 的单个调用。
备注
对于大多数数据库提供程序,“SaveChanges” 是事务性的。 这意味着所有操作将一起成功或一起失败,绝不会部分的应用这些操作。
using (var context = new BloggingContext())
{
// seeding database
context.Blogs.Add(new Blog { Url = "http://example.com/blog" });
context.Blogs.Add(new Blog { Url = "http://example.com/another_blog" });
context.SaveChanges();
}
using (var context = new BloggingContext())
{
// add
context.Blogs.Add(new Blog { Url = "http://example.com/blog_one" });
context.Blogs.Add(new Blog { Url = "http://example.com/blog_two" });
// update
var firstBlog = context.Blogs.First();
firstBlog.Url = "";
// remove
var lastBlog = context.Blogs.Last();
context.Blogs.Remove(lastBlog);
context.SaveChanges();
}