You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI迁移至Azure DataSync后GetItemsAsync返回空列表

问题排查与解决步骤

1. 检查本地同步缓存的同步触发

Azure Data Sync默认优先读取本地SQLite缓存,若仅完成表初始化但未执行同步,本地缓存为空就会返回0条数据。修改代码,在初始化后主动同步云端数据到本地:

public async Task<IEnumerable<Configuration>> GetItemsAsync() 
{ 
    await InitializeAsync(); 
    // 拉取云端数据到本地缓存,"all_configs"为同步任务标识
    await _table.PullAsync("all_configs", _table.CreateQuery());
    return await _table.GetAsyncItems().ToListAsync(); 
}

2. 确认实体类的DataSync属性配置

DataSync要求实体类必须正确标注同步相关属性,否则本地缓存无法映射云端数据。检查你的Configuration类:

using Microsoft.Azure.Mobile.DataSync;

[SyncTable]
public class Configuration
{
    [PrimaryKey]
    public string Id { get; set; }
    // 其他实体属性...
}

缺少[SyncTable]或[PrimaryKey]会导致云端数据无法写入本地缓存,最终返回空列表。

3. 验证同步上下文的初始化逻辑

确保InitializeAsync中正确初始化同步客户端、本地存储和表结构:

private async Task InitializeAsync()
{
    if (_table != null) return;

    var client = new MobileServiceClient("你的Azure服务URL");
    var store = new MobileServiceSQLiteStore("local.db");
    // 必须定义与云端匹配的表结构
    store.DefineTable<Configuration>();
    await client.SyncContext.InitializeAsync(store);
    _table = client.GetSyncTable<Configuration>();
}

表结构与云端实体不匹配时,同步的数据无法写入本地缓存,导致查询结果为空。

4. 捕获同步过程的静默异常

同步操作可能出现权限、数据类型不匹配等静默异常,需添加异常排查:

try
{
    await _table.PullAsync("all_configs", _table.CreateQuery());
}
catch (Exception ex)
{
    Debug.WriteLine($"同步失败:{ex.Message}");
}

通过异常信息定位同步失败的具体原因。

5. 确认查询方法的使用逻辑

GetAsyncItems()仅查询本地缓存,若需直接获取云端数据可改用ReadAsync()(但会丢失离线缓存能力):

// 直接读取云端数据(不推荐,不符合DataSync同步模式)
return await _table.ReadAsync().ToListAsync();

优先推荐通过PullAsync同步后读取本地缓存,以保留离线功能。


内容的提问来源于stack exchange,提问作者Brenden Jacobson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:20:25