【译】第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 == 1).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()。

这意味着调用线程应该等待直到异步方法完成,所以我们可以执行另一个进程,直到我们从异步方法得到结果。

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

转载于:https://www.cnblogs.com/talentzemin/p/7359050.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值