给出:
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上打开了一个issue,因为从我所知这似乎是一个错误。
答案 0 :(得分:0)
我在github上发表的评论中有解决方法:
您不能为EntityTypes调用
Query<>
方法。您必须使用Set<>
方法。
如果可能的话,TQuery
比仅仅class
受到更多约束可能会有所帮助。