实体框架6,.NET框架4.0和SaveChangesAsync(Entity Framework

2019-10-21 13:04发布

我开发的VS2012 ,针对.NET Framework 4.0使用EF6

我已经从微软安装的NuGet包。

 <package id="Microsoft.Bcl" version="1.1.8" targetFramework="net40" />
 <package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net40" />
 <package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net40" />

我想asynchroniously更改保存到数据库中。 我发现有Await可用,但我找不到SaveChangesAsync

我需要做什么做的,使异步操作与框架4.0?

(我不能upgrage到框架4.5,需要坚持使用4.0)

Answer 1:

async功能不包含在.NET 4.0编译EF组装,所以你必须使用一个Task中,你拨打SaveChanges

从EF的源代码摘录:

#if !NET40

        public virtual Task<int> SaveChangesAsync()
        ...

        public virtual Task<int> SaveChangesAsync(CancellationToken cancellationToken)
        ...

#endif

所以,你可以创建这样一个方法:

public Task<int> SaveChangesAsync(MyDbContext context)
{
    return Task.Factory.StartNew(() => context.SaveChanges());
}

我假设你知道的事实DbContext不是线程安全的,所以你必须确保上下文不用于在平均时间等数据库交互。



文章来源: Entity Framework 6, .NET Framework 4.0 and SaveChangesAsync