同步操作
查询数据
为了防止连接数过多,忘记及时释放,建议用using方式操作
using (var context = new MySqlTestDBContext())
{
var blogs = context.Blogs
.Where(b => b.Url.Contains("dotnet"))
.ToList();
}
查询数据,使用的是大量的Linq语言,复杂查询也包括Join等多表连接,和Group By后,Sum(),Avg(),Max(),Min(),FirstOrDefault(),LastOrDefault()等聚合函数,具体可查询Linq的语法,这里不再展开
添加数据
using (var context = new MySqlTestDBContext())
{
var blog = new Blog { Url = "http://example.com" };
var Id = context.Blogs.Add(blog).Entity.Id;
context.SaveChanges();
}
使用 DbSet.Add 方法添加实体类的新实例。 调用 SaveChanges 时,数据将插入到数据库中。
更新数据
找到Blogs表中,BlogId为1的数据,将它的Url字段进行更新
using (var context = new MySqlTestDBContext())
{
var blog = context.Blogs.FirstOrDefault(i=>i.Id==1);
blog.Url = "http://example.com/blog";
context.SaveChanges();
}
删除数据
找到Blogs表中,BlogId为1的数据,将它物理删除
using (var context = new MySqlTestDBContext())
{
var blog = context.Blogs.FirstOrDefault(i=>i.Id==1);
context.Blogs.Remove(blog);
context.SaveChanges();
}
事务
对于大多数数据库提供程序,“SaveChanges” 是事务性的。 这意味着所有操作将一起成功或一起失败,绝不会部分的应用这些操作。
using (var context = new MySqlTestDBContext())
{
// 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 MySqlTestDBContext())
{
// 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();
}
异步操作
当在数据库中执行查询时,异步查询可避免阻止线程。 异步查询对于在胖客户端应用程序中保持响应式 UI 非常重要。 异步查询还可以增加 Web 应用程序中的吞吐量,即通过释放线程,以处理 Web 应用程序中的其他请求
查询数据
public async Task<List<Blog>> GetBlogsAsync()
{
using (var context = new MySqlTestDBContext())
{
return await context.Blogs.ToListAsync();
}
}
数据集除了ToList方法外,还有一个ToListAsync方法,返回的是一个异步的Task对象
保存数据
同理,异步保存也有一个方法SaveChangesAsync(),返回的也是一个异步Task对象
public static async Task AddBlogAsync(string url)
{
using (var context = new BloggingContext())
{
var blog = new Blog { Url = url };
context.Blogs.Add(blog);
await context.SaveChangesAsync();
}
}