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

如何在Microsoft.Datasync.Client中用Include实现远程表预加载?

在Microsoft.Datasync库中实现关联数据查询(类似Include的效果)

Microsoft.Datasync客户端本身没有内置的Include方法,但可以借助OData的$expand机制实现相同的关联数据加载效果,具体步骤如下:

后端配置(关键前提)

  1. 确保实体关联关系正确定义:在继承自EntityTableData的实体类中添加导航属性,同时在DbContext中配置对应的关联(比如HasOne/HasMany)。

    public class ChildEntity : EntityTableData
    {
        public string Name { get; set; }
        // 导航属性
        public ParentEntity ParentTable { get; set; }
        public string ParentTableId { get; set; }
    }
    
    public class AppDbContext : DbContext
    {
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            // 配置关联关系
            modelBuilder.Entity<ChildEntity>()
                .HasOne(c => c.ParentTable)
                .WithMany()
                .HasForeignKey(c => c.ParentTableId);
        }
    }
    
  2. 启用$expand查询支持:在Datasync的TableController中,允许客户端使用$expand查询参数:

    public class ChildEntityController : TableController<ChildEntity>
    {
        public ChildEntityController(AppDbContext context)
        {
            Context = context;
            // 允许$expand选项
            QueryOptions.AllowedQueryOptions |= Microsoft.AspNetCore.OData.Query.AllowedQueryOptions.Expand;
        }
    }
    

客户端实现

使用RemoteTable<T>提供的Expand方法,替代期望的Include方法,语法如下:

// 加载一级关联数据
var data = await _remotetable
                  .Expand(x => x.ParentTable)
                  .ToListAsync();

如果需要加载多层关联数据,支持两种写法:

// 链式调用加载多层
var data = await _remotetable
                  .Expand(x => x.ParentTable)
                  .Expand(x => x.ParentTable.SubTable)
                  .ToListAsync();

// 或者用逗号分隔的字符串形式
var data = await _remotetable
                  .Expand("ParentTable,ParentTable/SubTable")
                  .ToListAsync();

注意事项

  • 若后端未开启$expand支持,客户端请求会返回400错误,必须确保控制器配置正确。
  • 离线同步场景下,本地存储(如SQLite)需要正确配置导航属性的映射,才能在本地保存关联数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 01:00:07