【问题标题】:EF Core 2.1 InvalidCastException on DbContext.Query<T>()DbContext.Query<T>() 上的 EF Core 2.1 InvalidCastException
【发布时间】:2018-09-07 14:17:54
【问题描述】:

给定:

public class MyClass
{
  public MyClass(ApplicationDbContext db)
  {
     var query = db.Query<IdentityUser>();
  }
}

使用 ASP.NET Core 2.1,我在 db.Query&lt;IdentityUser&gt;() 调用中遇到此异常:

System.InvalidCastException: 'Unable to cast object of type 'Microsoft.EntityFrameworkCore.Internal.InternalDbSet\`1[Microsoft.AspNetCore.Identity.IdentityUser]' to type 'Microsoft.EntityFrameworkCore.DbQuery\`1[Microsoft.AspNetCore.Identity.IdentityUser]'.'

我用自己的实体遇到了这个问题,并使用罐头 ApplicationDbContext/IdentityUser 用最少的代码复制了它。这是 .NET Core 2.1 中的错误还是我做错了什么?

这是githubDbContext.Query&lt;T&gt;()提供的源代码:

public virtual DbQuery<TQuery> Query<TQuery>()
            where TQuery : class
            => (DbQuery<TQuery>)((IDbQueryCache)this)
                .GetOrAddQuery(DbContextDependencies.QuerySource, typeof(TQuery));

似乎将((IDbQueryCache)this).GetOrAddQuery(DbContextDependencies.QuerySource, typeof(TQuery)) 转换为(DbQuery&lt;TQuery&gt;) 的异常抛出

我在 github 上打开了一个 issue,因为据我所知,这似乎是一个错误。

【问题讨论】:

    标签: ef-core-2.1


    【解决方案1】:

    在我的github上发表评论有解决办法:

    您不能为 EntityTypes 调用 Query&lt;&gt; 方法。您必须使用Set&lt;&gt; 方法。

    如果可能的话,TQueryclass 受到更多限制可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-03-29
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多