当前位置: 首页 > 知识库问答 >
问题:

实体框架6中的多异步?

胡鸿羲
2023-03-14

这是我的代码:

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

但是当我从控制器调用函数时。它显示错误

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

请帮我解决这个问题。

共有3个答案

计承德
2023-03-14

如果您使用Unity进行依赖注入,例如存储库模式,您将在使用创建/更新/删除的两个或多个上下文时收到以下错误:

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

这可以使用PerRequest estLifetimeManager解决。更多信息:

C#EF6使用Unity-Asp对一个上下文进行多次异步调用。Net Web Api

container.RegisterType<DbContext>(new PerRequestLifetimeManager());
container.RegisterType<ISupplierRepository, SupplierRepository>();
container.RegisterType<IContactRepository, ContactRepository>();
颛孙哲
2023-03-14

如果您使用IoC容器进行数据提供者注入,请考虑在生命周期中使用“transient”或“PerWebRequest”类型。

例如:https://github.com/castleproject/Windsor/blob/master/docs/lifestyles.md

相洛华
2023-03-14

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

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

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);
 类似资料:
  • 问题内容: 我在TSQL中有以下查询 我在实体框架中有以下查询 当我尝试编译它时,我得到 错误3名称“ p”不在“等于”左侧的范围内。考虑在“等号”的任一侧交换表达式。 错误4名称“链接”不在“等于”右侧的范围内。考虑在“等号”的任一侧交换表达式。 问题答案: 错误究竟在说什么 应该 完整的代码

  • 问题内容: 我需要一种使用实体框架LINQ区分SQL异常的方法,例如,当我从DbUpdateException获得的所有信息都是大量嵌套的内部异常和无用的长错误消息时,如何区分前面的关键约束违例或唯一约束违例?是否有任何较低级别的例外,我可以在其中执行“ Catch FKException”之类的操作;捕获“ uniqueException”或类似的东西。 问题答案: 正在使用sql错误代码…

  • 场景: 我有两个MySQL数据库: 大型主数据库 小型客户端数据库 示例表: 大数据库用户: 文本用户名 int id varchar登录 varchar密码 ...更多的领域 客户端数据库用户 内部id int UNIQUE api\u id(来自master的id) varchar登录 varchar密码 问题:我需要同步数据库,但我不知道如何以最佳方式进行同步。我读过这个问题,但它很老了,没

  • 问题内容: 我希望将动态连接字符串传递给实体框架上下文。我有150多个相同的模式(每个帐户一个),我想这样选择连接: 从理论上讲,这很容易,因为我可以创建一个connectionString并将其作为构造函数的参数传递,例如: 仅传递连接字符串名称时,我可以成功连接,但如下所示动态生成时,则不能成功。我现在意识到这是因为web.config中的连接字符串具有属性。 但是,当我将实际的连接字符串动态

  • 将只填充Enabled属性(下图),而不填充Application或CustomVariableGroup属性(下图)。我该怎么做?

  • 问题内容: 我有两个表: 通常,我会创建一个映射表’ ‘来将这些表链接成多对多关系。 这是最好的方法吗?我应该将s的列表存储在xml列中,而不是存储在“事件”表中吗? 我使用带有Linq的.NET 3.5 / 4作为DAL(尽管我认为这可能与所提出的设计问题无关)。 有兴趣看看人们的意见是什么。 谢谢。戴夫 问题答案: 映射表绝对是执行此操作的最佳方法-实体框架会将映射表转换为两侧的实体集合,并且