猿教程 Logo

异步查询和保存

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效:去购买

您可以利用.NET 4.5与Entity Framework的异步执行。 EF 6有能力使用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 == 1).FirstOrDefaultAsync<Student>());
            
        Console.WriteLine("Finished GetStudent...");
               
    }
    return student;
}

正如你在上面的代码中可以看到的,GetStudent方法被标记为async以使其异步。 异步方法的返回类型必须是Task。 GetStudent返回学生实体的对象,所以返回类型必须是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();
}

如上面的代码所示,我们以通常的方式调用异步方法GetStudent并将引用存储在变量student中。 然后,我们调用student.wait()。 这意味着调用线程应该等待,直到异步方法完成,所以我们可以做另一个进程,直到我们从异步方法获得结果。

上面显示的代码将具有以下输出:


阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效: 去购买


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/entity/async-query-and-save.html