使用Entity Framework将数据异步插入数据库

时间:2016-02-16 22:28:28

标签: c# entity-framework asynchronous

我的存储库中有一个使用Entity Framework插入数据的方法。我需要将此方法转换为异步方法。我怎么能这样做?

这是我的方法:

public void movetosecondpost(ProcessingPost processingPost)
{
        SuccessPost movedQueue = new SuccessPost();
        movedPost.Id = processingPost.Id;
        Context.ProcessingPost.Remove(processingPost);
        Context.SuccessPost.Add(movedPost);
}

在我的上下文中,我有这两种保存方法:

   public override int SaveChanges()
   {
        return base.SaveChanges();
   }

   public override Task<int> SaveChangesAsync(CancellationToken cancellationToken)
   {
        cancellationToken.ThrowIfCancellationRequested();
        return base.SaveChangesAsync(cancellationToken);
   }

2 个答案:

答案 0 :(得分:2)

使此方法(movetosecondpost)异步是没有意义的,因为它不涉及任何异步工作(例如IO)。如果包含保存对数据库的更改,则可以使其异步。

如果有一个方法调用此方法然后调用SaveChanges,那么您可以使该方法异步。

答案 1 :(得分:2)

使用async关键字

标记时,方法只能是异步的
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken)
{
    cancellationToken.ThrowIfCancellationRequested();
    return await base.SaveChangesAsync(cancellationToken);
}

现在,您可以使用await关键字将Task<int>的结果展开到int。这基本上是返回Task<int>int之间的区别。任务只是一个承诺:我将执行一个返回int的操作,但我不确切知道何时。 在对数据库进行更改时,除了等待它完成之外,您的线程无法执行任何操作,因此通过执行此操作,您的线程将在发生这种情况时移回线程池。数据库操作完成后,将从线程池中获取另一个线程,并继续执行方法。