我正在尝试使用MobileServiceSQLiteStore同步,但是我从未检索过在线存储的数据。
实际上,使用在线模式非常有效。但是,当我使用IMobileServiceSyncTable而不是IMobileServiceTable时,即使在执行推和拉操作之后,本地存储也永远不会填充在线数据。
奇怪的是,当我通过IMobileServiceSyncTable插入数据时,会填充我的蔚蓝在线数据,并且这些新数据将在本地商店中启动的新应用中正确读取。
以下是我的代码的一个示例:
//service client access
this.client = new MobileServiceClient(Constants.ApplicationURL);
//local store definition
this.Store = new MobileServiceSQLiteStore(offlineDbPath);
//intializing table in local store
Store.DefineTable<MYTABLE>();
//Initializing synchronisation context
await CurrentClient.SyncContext.InitializeAsync(Store);
//mapping table
var myTable = CurrentClient.GetSyncTable<MYTABLE>();
//Full synchronisation
await client.SyncContext.PushAsync();
await myTable.PullAsync(null, myTable.CreateQuery());
//Getting results from local store
var results = await myTable.ToListAsync();
因此,在这一点上,结果仍然为空。但是我使用GetTable而不是GetSyncTable获取所有数据。 更准确地说,我在SQL Azure表中存储了5行,由Azure AppService使用Azure EasyTables进行接口连接。 如果我使用以下代码,则一切正常,我成功获得了5个结果:
//service client access
this.client = new MobileServiceClient(Constants.ApplicationURL);
//mapping to online easytable
var myTable = client.GetTable<MYTABLE>();
//Getting results from online azure sql database
var results = await myTable.ToListAsync();
奇怪的是,我可以使用MobileServiceSQLiteStore填充在线数据库。但是,如果我使用同步在线/离线代码重新运行我的应用程序,则我只会读取新插入的数据。 因此,有一些因素阻止了本地商店的初始填充,但是找不到任何有用的方法。
您有没有注意到这种行为?
我将此线程发布在MSDN上,但他们在这里将我发送给我: https://social.msdn.microsoft.com/Forums/en-US/9c5db53f-8b64-4a00-85ac-26498a216e7e/never-getting-online-azure-data-using-mobileservicesqlitestore?forum=azuremobile&prof=required
有关技术环境的信息: VS2017,Xamarin.Forms,NetStandard2.0。
谢谢您的帮助
答案 0 :(得分:0)
我终于找到了问题的根源。
实际上,在线Azure SQL Server数据库中的“ ID”列名称必须用小写字母命名。因此,在数据库中重命名它,并将JSon定义从“ ID”重命名为“ id”解决了该问题。
我希望它将对您有帮助