Entity Framework Core 位于 AWS Aurora PostgreSQL 集群之上,具有写/读节点和只读节点

Jam*_*son 6 c# postgresql entity-framework-core amazon-aurora

我有一个运行 .NET Core 的 API 网关,它代理 AWS Lambda 函数。这些 Lambda 函数使用 Entity Framework Core 与 AWS Aurora PostgreSQL RDS 集群进行通信。集群包含1个读/写节点和1个只读节点。

在设置 EF Core 期间,我首先使用数据库来搭建脚手架,效果很好。脚手架是通过集群的读/写实例完成的,读写实例是生成的 DatabaseContext 类中的上下文连接字符串中引用的实例。

但是,我有一些读取密集型 API 方法(以及生成的 Lambda 函数),我想专门指出我的只读节点(它具有来自 AWS 自动管理的读/写节点的亚秒级复制)。但是我不知道如何在我的 EF Core 实现中进行设置。我是 EF Core 的初学者,所以我很高兴能将它与一个节点一起使用。如何在 .NET Core 应用程序中进行设置,以便可以指定一些查询以转到只读节点?只读节点具有完全相同的架构和对象。

如果我尝试通过 EF Core CLI 使用数据库上下文脚手架执行数据库优先脚手架,但将其指向只读节点,这会起作用吗?还是惨败?我应该有某种特定的方式来设置它吗?或者我应该避免使用 EF Core 作为只读节点,而只使用 Dapper 或 SqlKata 之类的东西来执行只读查询并维护自己的连接等?

Flo*_*ida 12

假设您的上下文被命名DbContext为扩展它:

public class RwDbContext : DbContext {}
public class RoDbContext : DbContext {}
Run Code Online (Sandbox Code Playgroud)

然后,Startup.cs注册此上下文并将它们指向不同的连接字符串:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<RwDbContext>(options => options.UseNpgsql(Configuration.GetConnectionString("RwDbContext")));
    services.AddDbContext<RoDbContext>(options => options.UseNpgsql(Configuration.GetConnectionString("RoDbContext")));
}
Run Code Online (Sandbox Code Playgroud)

还将连接字符串添加到您的appsettings.json

{
  "ConnectionStrings": {
    "RwDbContext": "Host=rwdb;...",
    "RoDbContext": "Host=rodb;..."
  }
}
Run Code Online (Sandbox Code Playgroud)

现在您可以使用它RoDbContext来阅读和RwDbContext写作。

但是从现在开始,在与您交互时,dotnet ef您必须使用该--context <DBCONTEXT>选项将其指向 R/W 上下文。

  • 很高兴我能帮忙。赏金对我来说不是激励。我只是希望更多的开发人员使用 dot net core + postgres :) (2认同)