【译】第37节---EF6-异步查询和保存
原文:http://www.entityframeworktutorial.net/entityframework6/async-query-and-save.aspx
你可以在.NET4.5下使用 EF6 DbContext异步执行查询和命令。
我们来看看如何先执行异步查询,然后再看对context.SaveChanges的异步调用。
异步查询
private static async Task<Student> GetStudent()
{
Student myStudent = null; using (var context = new SchoolDBEntities())
{
Console.WriteLine("Start GetStudent..."); myStudent = await (context.Students.Where(s => s.StudentID == ).FirstOrDefaultAsync<Student>()); Console.WriteLine("Finished GetStudent..."); } return student;
}
上面的代码所示,GetStudent方法使用async关键字标识使其异步。
异步方法的返回类型必须为Task。
GetStudent返回一个Student实体的对象,所以返回类型必须是Task <Student>。
此外,查询标记为await。 这将释放调用线程以执行其他操作,直到它执行查询并返回数据。
我们使用了System.Data.Entity的FirstOrDefaultAsync扩展方法,你也可以适当使用其他扩展方法,例如SingleOrDefaultAsync,ToListAsyn等。
异步保存
可以和上面示例一样的方式异步调用context.SaveChanges:
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...");
} }
获取异步查询的结果
异步时可以使用wait方法得到结果,如下:
public static void AsyncQueryAndSave()
{
var queryResult = GetStudent(); Console.WriteLine("Let's do something else till we get student.."); queryResult.Wait(); var student1 = queryResult.Result; student1.FirstName = "Modified First Name"; var studentSave = SaveStudent(student1); Console.WriteLine("Let's do something else till we save student.." ); studentSave.Wait(); }
如上面的代码所示,我们以普通的方式调用Async方法GetStudent,并将引用存储在变量学生中。
然后,我们调用student.wait()。
这意味着调用线程应该等待直到异步方法完成,所以我们可以执行另一个进程,直到我们从异步方法得到结果。
上面显示的代码将具有以下输出:

【译】第37节---EF6-异步查询和保存的更多相关文章
- Entity Framework异步查询和保存
EF6开始提供了通过async和await关键字实现异步查询和保存的支持(.net 4.5及更高版本).虽然不是所有的操作都能从异步中获益,但是耗时的操作.网络或IO密集型任务中,使用异步可以提升客户 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (41) ------ 第七章 使用对象服务之标识关系中使用依赖实体与异步查询保存
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-7 标识关系中使用依赖实体 问题 你想在标识关系中插入,更新和删除一个依赖实体 ...
- Entity Framework入门教程(11)---EF6中的异步查询和异步保存
EF6中的异步查询和异步保存 在.NET4.5中介绍了异步操作,异步操作在EF中也很有用,在EF6中我们可以使用DbContext的实例进行异步查询和异步保存. 1.异步查询 下边是一个通过L2E语法 ...
- php中mysql数据库异步查询实现
问题 通常一个web应用的性能瓶颈在数据库.因为,通常情况下php中mysql查询是串行的.也就是说,如果指定两条sql语句时,第二条sql语句会等到第一条sql语句执行完毕再去执行.这个时候,如果执 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (11) -----第三章 查询之异步查询
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第三章 查询 前一章,我们展示了常见数据库场景的建模方式,本章将向你展示如何查询实体 ...
- MSSQL数据库链接字符串Asynchronous Processing=true不是异步查询吗,怎么是缓存
;Asynchronous Processing=true 不是异步查询吗,怎么是缓存 <!--<add name="default" providerName=&q ...
- asp.net mvc异步查询
对于asp.net mvc异步查询 如何做MVC异步查询,做列表页面. 查询是项目中必不可少的工作,而且不同的项目不同的团队,都有自己的简单方法.Asp.net mvc 有自己独特的优势,下面是结合m ...
- Android 异步查询框架AsyncQueryHandler的使用
AsyncQueryHandler简介: 异步的查询操作帮助类,可以处理增删改(ContentProvider提供的数据) 使用场景: 在一般的应用中可以使用ContentProvider去操作数据库 ...
- 异步查询json传日期格式到前台,变成了时间戳的格式
问题: 使用mybatis 查询mysql数据库,其中一个日期格式的字段,由异步查询使用 json传递到前台,变成了时间戳,而不是日期格式了.如何使查询出的日期展示成日期格式呢 解决办法: 1.尝试使 ...
随机推荐
- RSA 加密 解密 公钥 私钥 签名 加签 验签
http://blog.csdn.net/21aspnet/article/details/7249401# http://www.ruanyifeng.com/blog/2013/06/rsa_al ...
- localstorage跨域解决方案
localstorage也存在 跨域的问题, [解决思路如下] 在A域和B域下引入C域,所有的读写都由C域来完成,本地数据存在C域下; 因此 A哉和B域的页面必定要引入C域的页面; 当然C域最好是主域 ...
- GUI常用对象的属性
%常用对象的属性 %.figure %hf=figure; %get(hf); %改变颜色 set Color %set(hf,'Color','w'); %去掉默认的菜单 Menubar %set( ...
- [转载]CSS教程--字体与文本属性
b>font-family功能:用于改变HTML标志或元素的字体,你可设置一个可用字体清单.浏览器由前向后选用字体.语法:{font-family:字体1,字体2, ... ,字体n} font ...
- 前端框架VUE----webpack打包工具的使用
在这里我仅仅的是对webpack做个讲解,webpack这个工具非常强大,解决了我们前端很繁琐的一些工具流程繁琐的事情.如果感兴趣的同学,还是看官网吧. 中文链接地址:https://www.webp ...
- maven编译项目报错,提示找不到符号或程序包XXX不存在
我的原因是maven依赖的jar包都下载了,但是引用的同一个项目下其他模块jar包找不到 解决方法: 把需要的jar包在pom里添加依赖 再次运行项目,Maven Dependencies下就会多了几 ...
- qt中QtreeWidget与QstackWidget关联的问题
过程:要做一个图书管理系统,主界面是类似于这样的 左边是类似于树形空间的东西,当点击左边的左边的窗体的时候,右边的窗口也会跟着切换. 为了实现这个功能,必须要有两个控件,QTreeWidget和Qst ...
- MXNet官方文档中文版教程(3):神经网络图(Symbol)
https://blog.csdn.net/qq_36165459/article/details/78394259 文档英文原版参见Symbol - Neural network graphs an ...
- PID控制器开发笔记(转)
源: PID控制器开发笔记
- EDK II之USB设备驱动程序的加载与运行
本文简单介绍一下USB设备的驱动程序是如何匹配设备以及被加载的: 上文(UDK中USB总线驱动的实现框架)提到USB总线枚举设备的最后一步是调用gBS->ConnectController()去 ...