带有 ReadAsync 和 ObjectContext.Translate 的 ExecuteReaderAsync 跳过第一行

ExecuteReaderAsync with ReadAsync and ObjectContext.Translate skips first row

我有这样的代码:

List<Models.MyModel> myobjects = new List<Models.MyModel>();
using (SqlDataReader reader = await cmd.ExecuteReaderAsync())
{
    if(await reader.ReadAsync())
    {
        myobjects.AddRange(((IObjectContextAdapter)this)
        .ObjectContext
        .Translate<Models.MyModel>(reader,
            GetEntitySetName<DbModels.MyModel>(),
            MergeOption.NoTracking);
    }
}

但是,这将跳过结果集中的第一行。如果我将其更改为

List<Models.MyModel> myobjects = new List<Models.MyModel>();
using (SqlDataReader reader = await cmd.ExecuteReaderAsync())
{
    //if(await reader.ReadAsync())
    {
        myobjects.AddRange(((IObjectContextAdapter)this)
        .ObjectContext
        .Translate<Models.MyModel>(reader,
            GetEntitySetName<DbModels.MyModel>(),
            MergeOption.NoTracking);
    }
}

我找回了所有行。有没有人遇到过这个?如果是这样,是否有解决方法或其他调用方式?相应的同步调用 cmd.ExecuteReader()reader.Read() 运行 没有任何问题并且总是 return 所有行。

if 条件中调用 await reader.ReadAsync() 后,您将 reader 移到了下一行。然后您将 reader 传递给 Translate 方法,以便它继续从中读取。由于您已经消耗了一些行 Translate 无法再读取它们(即它无法重置 reader 以从第一行开始读取)