如何将存储过程与Azure Mobile .Net后端服务一起使用?

时间:2019-03-08 06:25:30

标签: .net azure xamarin azure-mobile-services

我正在使用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属性进行了错误的转换吗?因为那是两个响应中唯一具有不同值的字段。

0 个答案:

没有答案