这是我的基本存储库的代码块。
public async Task<T> ReadAsync(Expression<Func<T, bool>> where = null)
{
return await this.dbSet.Where(where).FirstOrDefaultAsync<T>();
}
我遇到此错误,
EntityFrameworkQueryableExtensions.FirstOrDefaultAsync()不能在设置/验证表达式中使用
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9vdXNaYi5wbmcifQ==” alt =“在此处输入图像描述”>
FirstOrDefaultAsync
是extension method,它们是一种特殊的静态方法,但是就像它们是扩展类型上的实例方法一样被调用。
与Moq进行模拟(据我所知,从测试方法来看,我假设您正在使用的Moq)创建了一个从抽象类接口派生的代理对象。由于静态扩展方法
不是抽象类的接口的一部分,因此无法模拟该方法。 (See this question.)[不幸的是,Where
也是一种扩展方法,这意味着,您也不能嘲笑它。
if
用户存储库只不过是在EF周围提供(封装的)额外层而已,我认为嘲笑EF根本没有任何优点。我也因必须<< everything>可以互换并模拟到单元测试类的谬论而迷失了方向,这对逻辑很好(尽管不一定必要,但这是另外一个故事),但在您的情况下值得怀疑。