我使用以下方法将Azure数据库本地表与服务器表同步,但我在本地数据库上所做的更改未反映到Azure服务器,
T(n) = O(n log n)
使用上述方法时,我收到错误: - 推送操作失败。
任何帮助将不胜感激。
答案 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)