ASP.NET MVC Core 和实体框架中的 ToListAsync 不起作用

Posted

技术标签:

【中文标题】ASP.NET MVC Core 和实体框架中的 ToListAsync 不起作用【英文标题】:ToListAsync in ASP.NET MVC Core and Entity Framework not working 【发布时间】:2016-12-23 17:19:31 【问题描述】:

我在 ASP.NET MVC Core 和 Entity Framework 中有以下代码,当我执行 ToListAsync 时出现以下错误。

附加信息:源 IQueryable 未实现 IDbAsyncEnumerable。仅来源 实现 IDbAsyncEnumerable 可用于实体框架 异步操作。有关更多详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=287068.

这是我的代码:

var states = mDbContext.State.ToListAsync();
var countries = mDbContext.Country.ToListAsync();

mMemoryCache.Set(Countries, await countries,
    new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.MaxValue));
mMemoryCache.Set(States, await states,
   new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.MaxValue));

我的上下文类从 DbContext 扩展而来,我使用的是 EF 6。

public virtual DbSet<Country> Country  get; set; 

public virtual DbSet<State> State  get; set; 

知道为什么即使我已经安装了所有东西,我也无法执行ToListAsync()

【问题讨论】:

你的代码真的是public virtual DbSet State get; set; 吗? 是的,在继承自 DbContext 的上下文类中。 您使用的是哪个数据库?也许是 mysql 不,MS SQL 服务器 1) 您在 project.json 中使用的是哪个 .net 框架? 2) 你是否在你的控制器/类中添加了System.Data.Entity; 【参考方案1】:

ToListAsync()System.Data.EntityMicrosoft.EntityFrameworkCore 中都定义了。如果您同时导入两者,它将默认为 System.Data.Entity 中的定义,生成上述错误。删除System.Data.Entity并添加尝试使用Microsoft.EntityFrameworkCore添加;

【讨论】:

这应该是一条评论,因为它没有回答问题,也没有解释为什么这样做会有所帮助。 具有讽刺意味的是,它帮助我解决了一个不相关的问题 +1 这个答案也为我解决了完全相同的“IQueryable 没有实现 IDbAsyncEnumerable”错误。我希望 MS 在组织他们的库方面更聪明,或者至少在添加 EfCore 后创建了更多有用的错误消息.. 这帮助我将 ASP.NET 4.5 项目转换为 .NET Core 3.0 基本上使用ToList()需要using System.Linq;,使用ToListAsync()需要using Microsoft.EntityFrameworkCore;【参考方案2】:

EF6 != EF 核心。它们在一定程度上功能相似,但不兼容。

ToListAsync 是 EF Core 功能,您正尝试在 EF6 DbContext 上使用它。

这就是它不起作用的原因。如果您想使用此功能,您必须使用 EF Core DbContext - 但是您可能再次在代码的其他地方使用 EF6 功能,而这些功能将停止工作。

【讨论】:

以上是关于ASP.NET MVC Core 和实体框架中的 ToListAsync 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用trackerenableddbcontext在asp.net mvc5和代码中的实体框架中实现审计跟踪

基于 ASP.NET Core 中的现有数据库创建实体框架模型

MVC模式与ASP.NET Core MVC

ASP.NET 5/ASP.NET Core 1 中的关注点分离和 n 层架构

在 ASP.NET MVC Core 3.1 中通过 jQuery 为部分视图附加 html 的问题

ASP.NET Core Blazor 服务器中的实体框架上下文生命周期