Tengo una API Gateway que ejecuta .NET Core que actúa como proxy de las funciones de AWS Lambda. Con Entity Framework Core, estas funciones de Lambda se comunican con un clúster RDS de AWS Aurora PostgreSQL. El clúster contiene un nodo de lectura/escritura y un nodo de solo lectura.
Durante la configuración de EF Core, primero usé la base de datos para el scaffolding, lo que funcionó bien. El andamiaje se realizó fuera de la instancia de lectura/escritura del clúster, y la instancia de lectura y escritura es a lo que se hace referencia en la cadena de conexión de contexto en la clase DatabaseContext resultante.
Sin embargo, tengo algunos métodos API de lectura intensiva (y las funciones Lambda resultantes) que me gustaría señalar específicamente a mi nodo de solo lectura (que tiene una replicación de subsegundos desde el nodo de lectura/escritura administrado automáticamente por AWS). Sin embargo, no tengo idea de cómo configurar esto en mi implementación de EF Core. Soy un principiante con EF Core, por lo que estoy muy feliz de tenerlo funcionando con un nodo. ¿Cómo configuro las cosas en mi aplicación .NET Core para poder especificar algunas consultas para ir al nodo de solo lectura? El nodo de solo lectura tiene exactamente el mismo esquema y objetos.
Si trato de hacer un andamio de base de datos primero usando el andamio de contexto db a través de EF Core CLI pero apunto al nodo de solo lectura, ¿funcionará? ¿O fracasar miserablemente? ¿Hay algún tipo de forma específica en la que debería configurar esto? ¿O debería evitar EF Core para el nodo de solo lectura y simplemente usar algo como Dapper o SqlKata para realizar las consultas de solo lectura y mantener sus propias conexiones, etc.?
Suponiendo que su contexto se llame DbContext , extiéndalo así:
public class RwDbContext : DbContext {} public class RoDbContext : DbContext {} Y luego, en Startup.cs registre estos contextos y apúntelos a diferentes cadenas de conexión:
public void ConfigureServices(IServiceCollection services) { services.AddDbContext<RwDbContext>(options => options.UseNpgsql(Configuration.GetConnectionString("RwDbContext"))); services.AddDbContext<RoDbContext>(options => options.UseNpgsql(Configuration.GetConnectionString("RoDbContext"))); } También agregue la cadena de conexión a su appsettings.json :
{ "ConnectionStrings": { "RwDbContext": "Host=rwdb;...", "RoDbContext": "Host=rodb;..." } } Ahora puede usar RoDbContext para leer y RwDbContext para escribir.
Pero al interactuar con dotnet ef , debe usar la --context <DBCONTEXT> para apuntarlo al contexto R/W de ahora en adelante.