【问题标题】:ToListAsync in ASP.NET MVC Core and Entity Framework not workingASP.NET MVC Core 和实体框架中的 ToListAsync 不起作用
【发布时间】: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;

标签: c# asp.net-mvc entity-framework asp.net-core-mvc


【解决方案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 功能,而这些功能将停止工作。

【讨论】:

    猜你喜欢
    • 2010-09-25
    • 1970-01-01
    • 2011-02-20
    • 2021-09-05
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多