原文: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-异步查询和保存的更多相关文章

  1. Entity Framework异步查询和保存

    EF6开始提供了通过async和await关键字实现异步查询和保存的支持(.net 4.5及更高版本).虽然不是所有的操作都能从异步中获益,但是耗时的操作.网络或IO密集型任务中,使用异步可以提升客户 ...

  2. 《Entity Framework 6 Recipes》中文翻译系列 (41) ------ 第七章 使用对象服务之标识关系中使用依赖实体与异步查询保存

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-7  标识关系中使用依赖实体 问题 你想在标识关系中插入,更新和删除一个依赖实体 ...

  3. Entity Framework入门教程(11)---EF6中的异步查询和异步保存

    EF6中的异步查询和异步保存 在.NET4.5中介绍了异步操作,异步操作在EF中也很有用,在EF6中我们可以使用DbContext的实例进行异步查询和异步保存. 1.异步查询 下边是一个通过L2E语法 ...

  4. php中mysql数据库异步查询实现

    问题 通常一个web应用的性能瓶颈在数据库.因为,通常情况下php中mysql查询是串行的.也就是说,如果指定两条sql语句时,第二条sql语句会等到第一条sql语句执行完毕再去执行.这个时候,如果执 ...

  5. 《Entity Framework 6 Recipes》中文翻译系列 (11) -----第三章 查询之异步查询

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第三章 查询 前一章,我们展示了常见数据库场景的建模方式,本章将向你展示如何查询实体 ...

  6. MSSQL数据库链接字符串Asynchronous Processing=true不是异步查询吗,怎么是缓存

    ;Asynchronous Processing=true  不是异步查询吗,怎么是缓存 <!--<add name="default" providerName=&q ...

  7. asp.net mvc异步查询

    对于asp.net mvc异步查询 如何做MVC异步查询,做列表页面. 查询是项目中必不可少的工作,而且不同的项目不同的团队,都有自己的简单方法.Asp.net mvc 有自己独特的优势,下面是结合m ...

  8. Android 异步查询框架AsyncQueryHandler的使用

    AsyncQueryHandler简介: 异步的查询操作帮助类,可以处理增删改(ContentProvider提供的数据) 使用场景: 在一般的应用中可以使用ContentProvider去操作数据库 ...

  9. 异步查询json传日期格式到前台,变成了时间戳的格式

    问题: 使用mybatis 查询mysql数据库,其中一个日期格式的字段,由异步查询使用 json传递到前台,变成了时间戳,而不是日期格式了.如何使查询出的日期展示成日期格式呢 解决办法: 1.尝试使 ...

随机推荐

  1. 阿里巴巴 Java 代码规范

    1. 抽象类命名使用 Abstratc开头. 2. 阿里强制规定不允许任何魔法值(未经定义的常量)直接出现在代码中.魔法值会让代码的可读性大大降低,而且如果同样的数值多次出现时,容易出现不清楚这些数值 ...

  2. Linux基础命令---iptables-save

    iptables-save iptables-save指令可以将内核中当前的iptables配置导出到标准输出.通过IO重定向功能来定向输出到文件. 此命令的适用范围:RedHat.RHEL.Ubun ...

  3. localstorage跨域解决方案

    localstorage也存在 跨域的问题, [解决思路如下] 在A域和B域下引入C域,所有的读写都由C域来完成,本地数据存在C域下; 因此 A哉和B域的页面必定要引入C域的页面; 当然C域最好是主域 ...

  4. HDU 3172 Virtual Friends (map+并查集)

    These days, you can do all sorts of things online. For example, you can use various websites to make ...

  5. [转载]js 获取ASP RadioButtonList 选中的值

    var planList=document.all ('rblPlanType');    for(var i=1;i<planList.length;i++)    {     if(plan ...

  6. ajax处理文件下载

    ajax中处理文件下载,可能大数会遇到我和一样的问题,什么问题呢?就是下载程序执行了,但是浏览器没有任何下载操作,这是为什么呢? 那是因为response原因,一般请求浏览器是会处理服务器输出的res ...

  7. css技巧-案例

    点击进入:http://herry.wuhairui.cn/cssSkill/main.html

  8. Python建立多线程任务并获取每个线程返回值

    1.进程和线程 (1)进程是一个执行中的程序.每个进程都拥有自己的地址空间.内存.数据栈以及其他用于跟踪执行的辅助数据.进程也可以派生新的进程来执行其他任务,不过每个新进程都拥有自己的内存和数据栈,所 ...

  9. django模板-自定义标签、过滤器

    自定义标签或者过滤器的步骤 ①将要创建自定义标签或过滤器的app加入settings文件的installed_apps中 ②在app中创建templatetags目录,类型为包即packages ③在 ...

  10. Angular4.x 中的服务

    Angular4.x 中的服务 写下前面 学习angular4.x中的服务需要借助 ToDoList 项目来做,项目代码在上篇博客中讲到. https://www.cnblogs.com/wjw101 ...