9.11、多上下文、读写分离
一个复杂的系统通常不止一个数据库,这是需要我们能够灵活的切换数据库操作上下文。
多上下文
默认情况下,Hoa Framework 只有一个默认的数据库上下文:Hoa.EntityFramewok.Core.HoaDbContext,也就是默认只能操作一个数据库。
在 Hoa Framework 1.2.0 版本中,新增了多数据库上下文的支持。通过配置数据库多上下文可以同时操作多个数据库、并将数据库包裹在同一个事务中。
多上下文配置使用
第一步
在 appsetting.json 中新增新的数据库连接字符串。
{
"ConnectionStrings": {
"HoaDatabase": "Server=localhost;Database=Hoa;User=sa;Password=000000;",
"OtherDatabase": "Server=localhost;Database=Hoa;User=sa;Password=000000;"
}
}第二步
在 Hoa.EntityFramework.Core 层创建新的 DbContext,如 OtherDbContext:
using Microsoft.EntityFrameworkCore;
namespace Hoa.EntityFrameworkCore
{
public partial class OtherDbContext : DbContext
{
public OtherDbContext(DbContextOptions<OtherDbContext> options)
: base(options)
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("Name=OtherDatabase");
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}
}第三步
在 Hoa.Web.Core.ServiceExtensions.HoaDbContextConfigureExtension 中配置新的 DbContext 信息:
第四步
在 Hoa.Core 层创建 OtherDbContextIdentifier 数据库上下文标识类,注意:必须以 Identifier 结尾!!!并继承 DbContextIdentifier 类。
第五步
在 Hoa.EntityFrameworkCore.HoaEntityFrameworkCoreModule 中新增配置代码:
第六步
上述配置好后,可以通过 IDynamicRepository<TEntity,TDbContextIdentifier> 初始化了:
关键代码
读写分离配置
文档整理中......
关于分布式事务
在多数据库操作上下文操作数据库中,默认开启了分布式事务(同一个服务器内的不同数据库),如果数据库操作上下文不在同一个服务器上将报错:
那是因为 .NET Core 3.x 还不支持跨平台的分布式事务,需要在 .NET 5.x 版本才支持。
目前提供的解决方案是:在方法上面关闭分布式事务即可。
最后更新于
这有帮助吗?