Accediendo a la base de datos de EF Core al inicio para establecer valores constantes para la inyección de dependencias.
Tengo un conjunto de valores constantes en una base de datos. Idealmente, me gustaría leerlos una vez durante el inicio para no tener que volver a la base de datos cada vez. Actualmente tengo EF Core y normalmente pasaría IDbContext. Para empezar, tenía:
services.AddScoped<idatabaseconstants,databaseconstants>();
Entonces mi clase de constantes sería
public DatabaseConstants : IDatabaseConstants{
private int _value;
public DatabaseConstants(IDbContext dbContext)
{
_value = dbContext.Table.Where( ….
}
public int GetConstantValue() => _value;
}
Pero como está limitado, leería desde la base de datos cada vez que llamara a GetConstantValue().
Estoy pensando que necesito algo así en mi DependencyInjection.cs
services.AddSingleton
Entonces mi clase Constants sería
public DatabaseConstants : IDatabaseConstants{
private int _value;
public DatabaseConstants()
{
_value = ReadFromDatabase();
}
public int GetConstantValue() => _value;
}
El problema es que no estoy seguro de cómo acceder a mi base de datos con esta configuración.
¿Existe un patrón para leer desde la base de datos al inicio?</idatabaseconstants,databaseconstants>
davy.ai
Sí, hay un patrón para leer desde la base de datos al inicio. Una de las formas es utilizar el patrón de diseño Singleton para asegurarse de que la base de datos solo se lea una vez durante el inicio y luego se cachée en memoria. Aquí hay una posible implementación:
DatabaseConstants
:El método
CreateScope
asegura que la instanciaIDbContext
se crea y se elimina dentro del alcance de vida del singletonIDatabaseConstants
, lo que evita problemas de concurrencia.IDatabaseConstants
en su código para acceder a las constantes cachéadas:Este enfoque debería funcionar bien para conjuntos de datos pequeños que se pueden cachear en memoria sin problemas de rendimiento. Sin embargo, si tiene una gran cantidad de datos, podría considerar otras técnicas como la carga perezosa o el caché solo de las constantes más accesadas con frecuencia.