我正在使用Azure移动服务从SQL表检索数据。
如果我使用默认的Query()
作为返回类型,则可以获取移动应用中的所有记录:
这很好:
// GET tables/SaleItem
public IQueryable<SaleItem> GetAllSaleItems()
{
return Query();
}
在我的移动应用程序中,我正在使用Azure脱机同步,因此通过上述实现调用PullAsync()
可以正确执行。
现在,如果我将后端更改为通过存储过程检索数据,如下所示,而不是调用PullAsync()
进入死锁并且此后无法执行代码。
public IQueryable<SaleItem> GetAllSaleItems()
{
var connection = new SqlConnection(ConnectionString);
var command = new SqlCommand("SP_GetSalesData", connection);
command.CommandType = CommandType.StoredProcedure;
connection.Open();
var saleItems = new List<SaleItem>();
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
var brand = new SaleItem
{
Id = reader.GetValue(0).ToString(),
Name = reader.GetValue(1).ToString(),
Description = reader.GetValue(2).ToString(),
Price = Convert.ToDecimal(reader.GetValue(3)),
ImageUrl = reader.GetValue(4).ToString(),
Version = Encoding.ASCII.GetBytes(reader.GetValue(5).ToString()),
CreatedAt = new DateTimeOffset(DateTime.Now),
UpdatedAt = new DateTimeOffset(DateTime.Now),
};
saleItems.Add(brand);
}
}
connection.Close();
var items = saleItems.AsQueryable();
return items;
}
在邮递员中,我可以看到数据正确发送。
我对Version
属性进行了错误的转换吗?因为那是两个响应中唯一具有不同值的字段。