Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架6中的多异步?_Entity Framework_Asynchronous_Entity Framework 6 - Fatal编程技术网

Entity framework 实体框架6中的多异步?

Entity framework 实体框架6中的多异步?,entity-framework,asynchronous,entity-framework-6,Entity Framework,Asynchronous,Entity Framework 6,这是我的代码: var banner = context.Banners.ToListAsync() var newsGroup = context.NewsGroups.ToListAsync() await Task.WhenAll(banner, newsGroup); 但当我从控制器调用函数时。它显示出错误 在上一个异步操作完成之前,在此上下文上启动了第二个操作。使用“await”确保在此上下文上调用另一个方法之前已完成任何异步操作。任何实例成员都不能保证线程安全 请帮助我解决此问题。

这是我的代码:

var banner = context.Banners.ToListAsync()
var newsGroup = context.NewsGroups.ToListAsync()
await Task.WhenAll(banner, newsGroup);
但当我从控制器调用函数时。它显示出错误

在上一个异步操作完成之前,在此上下文上启动了第二个操作。使用“await”确保在此上下文上调用另一个方法之前已完成任何异步操作。任何实例成员都不能保证线程安全


请帮助我解决此问题。

异常清楚地解释了每个上下文一次只允许一个异步操作

因此,您必须
一次等待一个
,正如错误消息所示:

var banner = await context.Banners.ToListAsync();
var newsGroup = await context.NewsGroups.ToListAsync();
或者,您可以使用多个上下文:

var banner = context1.Banners.ToListAsync();
var newsGroup = context2.NewsGroups.ToListAsync();
await Task.WhenAll(banner, newsGroup);

如果您使用IOC容器进行数据提供程序注入,请考虑在生命周期中使用“瞬态”或“PyWebRebug”类型。


例如:

如果将Unity用于依赖项注入,例如使用repository模式,则使用两个或多个上下文以及create/update/delete时会出现以下错误:

无法定义两个对象之间的关系,因为 它们附着到不同的ObjectContext对象

这可以使用
PerRequestLifetimeManager
解决。更多信息请点击此处:

container.RegisterType(新的PerRequestLifetimeManager());
container.RegisterType();
container.RegisterType();

我有两项任务。如果我运行每个任务。这是成功。但是如果我按照上面的代码运行。这是一个错误只是一个注意事项,如果您有一个惰性变量在查询中使用上下文,即使使用wait,它也会抛出相同的错误,只需在查询之前获取属性,这是一个痛苦的发现。@Pedro.the.Kid:作为一般规则,不要在异步DB访问中使用惰性加载。延迟加载总是同步的,所以对附加数据使用Include或separate查询要好得多?我觉得这成了一个很大的限制因素。@Zapnologica:这就是ES6的设计方式。每个上下文一次只能处理一个查询。因此,如果在下一个查询开始之前完成一个查询,则只需要一个上下文。如果您想同时执行多个查询,这是一个问题。@StephenCleary,我很难找到该查询,因为在异常之前没有任何异常。我们有没有办法找到目前正在执行的任务?谢谢
container.RegisterType<DbContext>(new PerRequestLifetimeManager());
container.RegisterType<ISupplierRepository, SupplierRepository>();
container.RegisterType<IContactRepository, ContactRepository>();