c# - AWS Aurora PostgreSQL 集群顶部的 Entity Framework Core,带有一个写入/读取节点和一个只读节点
问题描述
我有一个运行 .NET Core 的 API 网关,它代理 AWS Lambda 函数。使用 Entity Framework Core,这些 Lambda 函数与 AWS Aurora PostgreSQL RDS 集群进行通信。集群包含一个读/写节点和一个只读节点。
在设置 EF Core 期间,我首先使用数据库来搭建脚手架,效果很好。脚手架是在集群的读/写实例上完成的,读写实例是生成的 DatabaseContext 类的上下文连接字符串中引用的内容。
但是,我有一些读取密集型 API 方法(以及生成的 Lambda 函数),我想专门指向我的只读节点(该节点具有来自 AWS 自动管理的读/写节点的亚秒级复制)。但是,我不知道如何在我的 EF Core 实现中进行设置。我是 EF Core 的初学者,所以我很高兴我可以使用一个节点。如何在我的 .NET Core 应用程序中进行设置,以便我可以指定一些查询以转到只读节点?只读节点具有完全相同的模式和对象。
如果我尝试通过 EF Core CLI 使用 db 上下文脚手架创建数据库第一个脚手架,但将其指向只读节点,那会起作用吗?还是惨败?我应该以某种特定的方式进行设置吗?或者我应该避免 EF Core 用于只读节点,而只使用 Dapper 或 SqlKata 之类的东西来执行只读查询并维护自己的连接等?
解决方案
假设您的 Context 被命名为DbContext
像这样扩展它:
public class RwDbContext : DbContext {}
public class RoDbContext : DbContext {}
然后,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")));
}
还将连接字符串添加到您的appsettings.json
:
{
"ConnectionStrings": {
"RwDbContext": "Host=rwdb;...",
"RoDbContext": "Host=rodb;..."
}
}
现在您可以使用RoDbContext
阅读和RwDbContext
写作。
但是从现在开始,在与您交互时,dotnet ef
您必须使用该--context <DBCONTEXT>
选项将其指向 R/W 上下文。
推荐阅读
- laravel - Laravel Seeder 永远卡住了
- c# - 如果我不使用 NetworkComms.Shutdown 我会破坏什么吗?
- css - 用于屏蔽子 SVG 的边框半径
- javascript - 从两个对象列表中获取独特的结果
- r - 删除(或替换)R 字符串中指定字符之后的所有内容
- python - 绘制(5,4)熊猫数据框
- vba - 将用户输入文本框中的文本放入另一张幻灯片上的文本框中
- bash - 修改标准输出的输出并重定向
- python - 在 Heroku(Selenium + Chromedriver)上部署 Tinder 脚本的 Django App 需要指导
- c# - 为什么 C# 编译器强制在构造函数中显式初始化所有值类型的字段?