在Azure Easy Tables

时间:2017-06-07 11:14:44

标签: sql azure xamarin

我正在尝试在我的Xamarin应用程序中使用Azures Easy Tables。

我在azure的2个表中有数据,我通过csv添加。这些表仅包括字符串,日期和数字等标准类型,并且正确同步到设备。

此外,我还有其他几个表存在于本地同步存储中。这些表/类也使用我自己定义的非标准类型。例如,我有一个类Contact,它有一个属性Company,它又是另一个有几个标准属性的类。这些表目前仅保存在同步存储中的本地,并且按预期工作。我现在正尝试将这些表同步到Azure Easy Tables。

所以我所做的是将表创建为Azure中名为Contact的Azure Easy Table,并激活动态模式。当我尝试Client.SyncContext.PushAsync()时,我得到以下异常:

MobileServiceLocalStoreException:
"Push operation has failed. See the PushResult for details."

Inner Exception / JsonReaderException:
"Failed to read errors from the local store."

Inner Exception / JsonException
"Unexpected character encountered while parsing value: C. Path '', line 0, position 0."

推送结果似乎没有提供任何信息(错误计数0)

我不知道这个Exception告诉我的是什么。也许问题与非标准属性有关?这些属性如何映射到一个简单的表。像公司这样的非标准财产只是分为几个列,如姓名,街道,城市?

或者Exception是否指向本地同步存储的其他问题?正如我所说,本地同步存储目前工作正常,一些表的azure easy table的拉动也正常。

我很感激每一个可能指向正确方向的答案。

1 个答案:

答案 0 :(得分:1)

根据我的理解,您正在处理联系公司表之间的1:1关系。对于离线同步,您需要在移动客户端中定义Contact和Company类,如下所示:

适用于移动客户端型号

public class Contact : TableData
{
   public string ContactName {get;set;}
   public string Phone {get;set;}
   public string Address {get;set;}
   public string CompanyId {get;set;}
}

public class Company : TableData
{
   public string CompanyName {get;set;}
   public string Address {get;set;}
}

注意:正如adrian hall的书Chapter3 :Relationships所述,关于移动客户端的关系如下:

  

您必须在客户端代码中遵循一些规则:

     
      
  • 在将该公司与Company相关联之前,您需要确保创建Contact
  •   
  • 您需要将CompanyIdContact一起存储,而不是Company对象(正如您在“实体框架”中通常所做的那样)。
  •   
     

如果您在离线模式下InsertAsync Company,则会在使用它之前将其置于操作队列中。由于操作队列按顺序处理,因此Company将在任何将使用它的记录更新之前发送到后端。

对于Azure Easy Tables,您需要同时创建Contact和Company表,它会自动为您创建的表创建Node.js后端。

我更希望单独处理表并手动处理移动客户端上的关系管理,这可以通过避免大多数关系的复杂性使服务器更简单。此外,您可以参考Chapter 3 - Data Access and Offline Sync