EntityFramework 如何进行异步化(关键词:async·await·SaveChangesAsync·ToListAsync)

应用程序为什么要异步化?关于这个原因就不多说了,至于现有项目中代码异步化改进,可以参考:实际案例:在现有代码中通过async/await实现并行

这篇博文内容针对的是,EntityFramework 中的代码异步化,示例代码就用之前写过的一篇博文:初试Code First(附Demo),下面是我在代码改进的过程中遇到的问题记录:

  1. Net Framework 版本修改为 4.5 以上,否则讲报“找不到“async”修饰符所需的所有类型。是否面向了错误的框架版本,或缺少对程序集的引用?”错误,参考地址:http://social.msdn.microsoft.com/Forums/es-ES/2947ff30-930a-47da-ab7f-bcb59173339f/async?forum=2212
  2. 引用“using System.Data.Entity;”命名空间,这个在搜索的时候,都会提到,但是我在 CodeFirstDemo 项目中,引用了这个命名空间,但发现还是没有 SaveChangesAsync 或 ToListAsync 的定义。
  3. “update-package EntityFramework”,NuGet 更新 EntityFramework 版本为 6.1.1,CodeFirstDemo 项目中的 EntityFramework 原始版本为 6.0.0,更新到 6.1.1 就好了,不知道是不是这个原因。

代码示例:

        public static async Task PerformDatabaseOperations()
        {
            using (var db = new NewContext())
            {
                Console.Write("输入新闻类型标题: ");
                var name = Console.ReadLine();

                var type_Model = new NewType { Name = name };
                db.NewTypes.Add(type_Model);
                await db.SaveChangesAsync();

                Console.WriteLine("查询新闻类型标题:");
                var search_type = Console.ReadLine();
                var query = await (from b in db.NewTypes
                                   where b.Name == search_type
                                   select b).ToListAsync();

                Console.WriteLine("查询结果:");
                foreach (var item in query)
                {
                    Console.WriteLine(item.Name);
                }

                Console.ReadKey();
            }
        }
    }

示例 Demo 下载:

参考资料:

原文地址:https://www.cnblogs.com/xishuai/p/entityframework_async_await_SaveChangesAsync_ToListAsync.html