带有 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 以从第一行开始读取)
我有这样的代码:
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 以从第一行开始读取)