EF Core 2.1 InvalidCastException для DbContext.Query <T>() - PullRequest
0 голосов
/ 07 сентября 2018

Дано:

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

Используя ASP.NET Core 2.1, я получаю это исключение при вызове db.Query<IdentityUser>():

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 или я что-то делаю неправильно?

Это исходный код github для DbContext.Query<T>():

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<TQuery>)

Я открыл проблему на github, так как это похоже на ошибку из того, что я могу сказать.

1 Ответ

0 голосов
/ 07 сентября 2018

Комментарий на мой выданный github имел решение:

Вы не можете вызвать Query<> метод для EntityTypes. Вы должны использовать Set<> способ.

Для TQuery может быть полезно быть более ограниченным, чем просто class, если это возможно.

...