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

.NET 8 Web API结合Azure SQL异地复制实现读写分离方案问询

.NET 8 Web API 实现 Azure SQL 读写分离(Active Geo-Replication)

核心思路

利用连接字符串的ApplicationIntent=ReadOnly参数,让读操作自动路由到异地只读副本;写操作使用默认连接指向主数据库。核心要点:

  • 异地副本在Active Geo-Replication配置下默认具备可读属性
  • 连接字符串需指向主库服务器地址,SQL驱动会自动完成副本路由,无需直接指定副本服务器

步骤1:配置连接字符串

在appsettings.json中配置两个独立的连接字符串:

{
  "ConnectionStrings": {
    "SqlPrimary": "Server=tcp:你的主库服务器名.database.windows.net,1433;Initial Catalog=你的数据库名;Persist Security Info=False;User ID=你的用户名;Password=你的密码;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;",
    "SqlReadOnly": "Server=tcp:你的主库服务器名.database.windows.net,1433;Initial Catalog=你的数据库名;Persist Security Info=False;User ID=你的用户名;Password=你的密码;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;ApplicationIntent=ReadOnly;"
  }
}

步骤2:注册数据库上下文

在Program.cs中分别注册主库和只读副本对应的数据库上下文:

// 主库上下文:用于所有写操作
builder.Services.AddDbContext<AppDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("SqlPrimary")));

// 只读副本上下文:用于所有读操作
builder.Services.AddDbContext<AppReadOnlyDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("SqlReadOnly")));

步骤3:业务层区分读写逻辑

在服务类中注入不同上下文,分别处理读写操作:

public class ProductService
{
    private readonly AppDbContext _primaryDbContext;
    private readonly AppReadOnlyDbContext _readOnlyDbContext;

    public ProductService(AppDbContext primaryDbContext, AppReadOnlyDbContext readOnlyDbContext)
    {
        _primaryDbContext = primaryDbContext;
        _readOnlyDbContext = readOnlyDbContext;
    }

    // 写操作:使用主库上下文
    public async Task CreateProductAsync(Product product)
    {
        _primaryDbContext.Products.Add(product);
        await _primaryDbContext.SaveChangesAsync();
    }

    // 读操作:使用只读副本上下文
    public async Task<List<Product>> GetAllProductsAsync()
    {
        return await _readOnlyDbContext.Products.ToListAsync();
    }
}

关键注意事项

  • 禁止直接连接副本服务器:通过主库地址+ApplicationIntent=ReadOnly连接,Azure会自动选择最优可用副本,避免手动维护副本地址
  • 容忍数据延迟:只读副本数据存在秒级延迟,对实时性要求极高的读操作仍需走主库
  • 故障转移自动适配:主库故障触发故障转移后,原副本晋升为主库,驱动会自动调整路由,无需修改连接字符串
  • 权限配置:确保数据库用户拥有主库的读写权限,以及副本的读权限

内容的提问来源于stack exchange,提问作者santosh kumar patro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:37:42