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

时间:2016-03-02 16:46:44

标签: sql-server-2008 entity-framework-4

我有这样的代码:

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()运行没有任何问题,并始终返回所有行。

1 个答案:

答案 0 :(得分:1)

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