当前位置:  开发笔记 > 编程语言 > 正文

EF + AutoFac + async"连接的当前状态正在连接"

如何解决《EF+AutoFac+async"连接的当前状态正在连接"》经验,为你挑选了0个好方法。

我有一个WebApi控制器,它在OWIN Startup类中有AutoFac注入的服务

builder.Register(c => new MyEntities()).InstancePerRequest();

我也试过了

builder.Register(c => new MyEntities()).InstancePerLifetimeScope();

在控制器操作中,我调用服务方法来创建新记录,通过HttpClient将创建的id传递给外部api以获取更多数据,然后使用一些返回数据更新新记录.

[HttpPost, Route("")] 
public async Task MyControllerAction(MyModel model)
{
    var id = await _MyService.CreateNewThing(model.SomeId);
    var externalData = await CallExternalApiThroughHttpClient(id);
    await _MyService.UpdateNewThing(id, externalData);
    return Ok();
}

服务代码

public class MyService : IMyService 
{
    private MyEntities _context;

    public MyService(MyEntities context)
    {
        _context = context;
    }

    public async Task CreateNewThing(int someId)
    {
        var thing = new Thing
        {
            SomeId = someId
        };

        _context.Things.Add(thing);

        await _context.SaveChangesAsync();

        return thing.Id;
    }

    public async Task UpdateNewThing(int id, string externalDataField)
    {
        var thing = await _context.Things.SingleOrDefaultAsync(o => o.Id == id);

            if (thing == null)
            {
                throw new ServiceNotFoundException("Thing " + transactionId + " not found");
            }

            thing.ExternalDataField= externalDataField;

            await _context.SaveChangesAsync();
    }
}

但是我InvalidOperationException在UpdateNewThing中得到了一个var thing = await _context.Things.SingleOrDefaultAsync(o => o.Id == id);

System.InvalidOperationException: The connection was not closed. The connection's current state is connecting.

好像我不得不放弃注入上下文,异步/等待或使用像contextfactory这样的东西; 除非有人能发现我错过的简单内容,否则我会继续这个设计.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有