Entity Framework 6.0 Tutorials(2):Async query and Save
2016-07-07 11:39
381 查看
Async query and Save:
You can take advantage of asynchronous execution of .Net 4.5 with Entity Framework. EF 6 has the ability to execute a query and command asynchronously using DbContext.Let's see how to execute asynchronous query first and then we will see an asynchronous call to context.SaveChanges.
Asynchronous Query:
private static async Task<Student> GetStudent() { Student student = null; using (var context = new SchoolDBEntities()) { Console.WriteLine("Start GetStudent..."); student = await (context.Students.Where(s => s.StudentID == 1).FirstOrDefaultAsync<Student>()); Console.WriteLine("Finished GetStudent..."); } return student; }
As you can see in the above code, GetStudent method is marked with async to make it asynchronous. The return type of asynchrounous method must be Task. GetStudent returns an object of Student entity so return type must be Task<Student>.
Also, query is marked with await. This frees the calling thread to do something else until it executes the query and returns the data. We have used FirstOrDefaultAsync extension method of System.Data.Entity. You may use other extension methods appropriately, such as SingleOrDefaultAsync, ToListAsyn, etc.
Asynchronous Save:
You can call context.SaveChanges asynchronously the same way as async query:private static async Task SaveStudent(Student editedStudent) { using (var context = new SchoolDBEntities()) { context.Entry(editedStudent).State = EntityState.Modified; Console.WriteLine("Start SaveStudent..."); int x = await (context.SaveChangesAsync()); Console.WriteLine("Finished SaveStudent..."); } }
Getting async query result:
You can get the result when asynchronous using the wait method as below:public static void AsyncQueryAndSave() { var student = GetStudent(); Console.WriteLine("Let's do something else till we get student.."); student.Wait(); var studentSave = SaveStudent(student.Result); Console.WriteLine("Let's do something else till we get student.." ); studentSave.Wait(); }
As shown in the code above, we call async method GetStudent in the usual way and store the reference in the variable student. Then, we call student.wait(). This means that the calling thread should wait until the asynchronous method completes, so we can do another process, until we get the result from the asynchronous method.
The code shown above will have the following output:
Download sample project for Async query & save demo.
相关文章推荐
- 使用context.Request.Files出现错误: 上传失败,错误信息:SyntaxError: Unexpected number
- UITableView的禁用重用机制
- @RequestBody
- String、StringBuffer、StringBuilder
- Entity Framework Tutorial Basics(39):Raw SQL Query
- UIButton 点击事件响应延迟 问题解决
- UICollectionView实现动画轮播
- String,StringBuilder,StringBuffer介绍
- kafka connect rebalance时herder大概率异常
- ViewPager+RadioGroup实现微信UI界面
- Handler的应用---探讨android更新UI的几种方法
- Entity Framework Tutorial Basics(34):Table-Valued Function
- UEFI引导模式和GPT分区形式下安装windows操作系统
- Servlet的Request与Response的用法与区别
- pyquery ----用法
- 125种滤镜:GPUImage
- ugui Slider使用(固定大小图片)
- CodeForces 687C The Values You Can Make
- <SDAutoLayout/UIView+SDAutoLayout.h> 的基本使用,记住这4个Api就足够了~
- Starting MySQL.The server quit without updating PID file (xxxx.pid).[FAILED]