Snyc Azure本地表与xamarin表单中的Azure服务器表

时间:2016-12-26 13:22:18

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

我使用以下方法将Azure数据库本地表与服务器表同步,但我在本地数据库上所做的更改未反映到Azure服务器,

T(n) = O(n log n)

使用上述方法时,我收到错误: - 推送操作失败。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

请记住,PushAsync()会将所有更改从本地存储推送到云,并且PullAsync首先执行推送。我会摆脱每个表的服务变量,只需在整个应用程序中使用该服务作为单例类。这是我的初始化。在此方法返回后,我的本地数据库与云同步,我可以开始使用我的表:

 public async Task InitializeStoreAsync()
{
    try
    {
        var sqliteStore = _platform.MobileServiceSqliteStore;

        sqliteStore.DefineTable<Memory>();
        sqliteStore.DefineTable<User> ();
        sqliteStore.DefineTable<Comment> ();
        sqliteStore.DefineTable<Status>();

        await _zumoClient.SyncContext.InitializeAsync(sqliteStore);
        _memoryTable = _zumoClient.GetSyncTable<Memory> ();
        _userTable = _zumoClient.GetSyncTable<User> ();
        _commentTable = _zumoClient.GetSyncTable<Comment> ();
        _statusTable = _zumoClient.GetSyncTable<Status>();

        await _userTable.PullAsync ();
        await _memoryTable.PullAsync ();
        await _commentTable.PullAsync ();
        await _statusTable.PullAsync();
    }
    catch (Exception ex) 
    {
        Debug.WriteLine ("Initialize Store failed: {0}", ex.Message);
    }
}

答案 1 :(得分:0)

您正在使用正确的方法将您的离线商店与服务器同步: -

 await _mobileService.SyncContext.PushAsync();

我建议你在catch块中写几行代码,这将帮助你找出为什么不在服务器端执行操作的原因 请使用catch块中的代码: -

public async Task PushDataAsync()
        {
          try
            {
                await _mobileService.SyncContext.PushAsync();
            }
            catch (MobileServicePushFailedException exc)
            {
                if (exc.PushResult != null)
                {
                    syncErrors = exc.PushResult.Errors;
                }
            }

            // Simple error/conflict handling.
            if (syncErrors != null)
            {
                foreach (var error in syncErrors)
                {
                    if (error.OperationKind == MobileServiceTableOperationKind.Update && error.Result != null || error.OperationKind == MobileServiceTableOperationKind.Insert && error.Result != null || error.OperationKind == MobileServiceTableOperationKind.Delete && error.Result != null)
                    {
                        //Update failed, reverting to server's copy.
                        await error.CancelAndUpdateItemAsync(error.Result);
                    }
                    else
                    {
                        // Discard local change.
                        await error.CancelAndDiscardItemAsync();
                    }


                        Debug.WriteLine(@"Error executing sync {2} operation. Item: {0} ({1}). Operation discarded.",
                            error.TableName, error.Item["id"], error.OperationKind);

                }
            }
}

答案 2 :(得分:0)