我有这样的代码:
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()
运行没有任何问题,并始终返回所有行。
答案 0 :(得分:1)
在await reader.ReadAsync()
条件中致电if
后,您将读者移至下一行。然后您将读者传递给Translate
方法,以便继续从中读取。由于您已经消耗了一些行Translate
,因此无法再读取它们(即它无法重置读取器以开始从第一行读取)