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 上下文。
| 归档时间: |
|
| 查看次数: |
7081 次 |
| 最近记录: |