永远不要使用MobileServiceSQLiteStore在线获取Azure SQL数据

时间:2018-07-20 08:33:51

标签: sqlite azure xamarin.forms

我正在尝试使用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。

谢谢您的帮助

1 个答案:

答案 0 :(得分:0)

我终于找到了问题的根源。

实际上,在线Azure SQL Server数据库中的“ ID”列名称必须用小写字母命名。因此,在数据库中重命名它,并将JSon定义从“ ID”重命名为“ id”解决了该问题。

我希望它将对您有帮助