C# 从ASPNetBoilerplate中SqlQuery的自定义存储库访问ToListSync()

C# 从ASPNetBoilerplate中SqlQuery的自定义存储库访问ToListSync(),c#,entity-framework,asynchronous,repository-pattern,aspnetboilerplate,C#,Entity Framework,Asynchronous,Repository Pattern,Aspnetboilerplate,我正在使用ASP.Net样板文件。我已经实现了IRepository来创建一个自定义存储库,这样我就可以添加一个自定义方法来从存储过程返回数据。但是,无论我如何构造任务、异步或等待组件,我都会遇到以下错误: System.InvalidOperationException: The provider for the source IQueryable doesn't implement IDbAsyncQueryProvider. Only providers that implement ID

我正在使用ASP.Net样板文件。我已经实现了IRepository来创建一个自定义存储库,这样我就可以添加一个自定义方法来从存储过程返回数据。但是,无论我如何构造任务、异步或等待组件,我都会遇到以下错误:

System.InvalidOperationException: The provider for the source IQueryable doesn't implement IDbAsyncQueryProvider. Only providers that implement IDbAsyncQueryProvider can be used for Entity Framework asynchronous operations. For more details see http://go.microsoft.com/fwlink/?LinkId=287068.
我的存储库看起来像:

namespace myApp.EntityFramework.Repositories
{
    public class TruckRepository : UHaulTrucks.HoustonRepositoryBase<DailyDockQuery>, ITruckRepository
    {

        public TruckRepository(IDbContextProvider<UHaulHoustonDbContext> dbContextProvider) : base(dbContextProvider)
        {

        }

  public IQueryable<DailyDockQuery> GetDailyDockQuery()
        {

           var ret = Context.Database.SqlQuery<DailyDockQuery>("exec Central_DailyDockQuery").AsQueryable();
            return ret;
        }
   }
}

正如我所提到的,我在存储库和服务中尝试了几种不同的方法,使用任务和异步组合,得到了相同的结果。我对以这种方式实现自定义存储库是新手,虽然我应该从IRepository获得CountAsync和ToListSync的好处,但我怀疑我仍然需要在自定义类中实现它们


非常感谢您的帮助。仍然在这里找到我的方法。

在Aspnetboilerplate中执行存储过程(选择记录)示例代码:

public async Task<List<string>> GetUserNames()
{
    EnsureConnectionOpen();

    using (var command = CreateCommand("GetUsernames", CommandType.storedProcedure))
    {
        using (var dataReader = await command.ExecuteReaderAsync())
        {
            var result = new List<string>();

            while (dataReader.Read())
            {
                result.Add(dataReader["UserName"].ToString());
            }

            return result;
        }
    }
}
public异步任务GetUserNames()
{
确保重新连接打开();
使用(var command=CreateCommand(“GetUserName”,CommandType.StoredProcess))
{
使用(var dataReader=await command.ExecuteReaderAsync())
{
var result=新列表();
while(dataReader.Read())
{
添加(dataReader[“UserName”].ToString());
}
返回结果;
}
}
}

我强烈建议您阅读有关在Aspnetboilerplate中使用存储过程的文档。您需要的一切都有:

在Aspnetboilerplate中执行存储过程(选择记录)示例代码:

public async Task<List<string>> GetUserNames()
{
    EnsureConnectionOpen();

    using (var command = CreateCommand("GetUsernames", CommandType.storedProcedure))
    {
        using (var dataReader = await command.ExecuteReaderAsync())
        {
            var result = new List<string>();

            while (dataReader.Read())
            {
                result.Add(dataReader["UserName"].ToString());
            }

            return result;
        }
    }
}
public异步任务GetUserNames()
{
确保重新连接打开();
使用(var command=CreateCommand(“GetUserName”,CommandType.StoredProcess))
{
使用(var dataReader=await command.ExecuteReaderAsync())
{
var result=新列表();
while(dataReader.Read())
{
添加(dataReader[“UserName”].ToString());
}
返回结果;
}
}
}

我强烈建议您阅读有关在Aspnetboilerplate中使用存储过程的文档。您需要的一切都在这里:

失败的不是存储库,而是提供者,您的DB连接器。失败的不是存储库,而是提供者,您的DB连接器。
var dailies = await query.ToListAsync();
public async Task<List<string>> GetUserNames()
{
    EnsureConnectionOpen();

    using (var command = CreateCommand("GetUsernames", CommandType.storedProcedure))
    {
        using (var dataReader = await command.ExecuteReaderAsync())
        {
            var result = new List<string>();

            while (dataReader.Read())
            {
                result.Add(dataReader["UserName"].ToString());
            }

            return result;
        }
    }
}