es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Establecer una variable estática en la capa de proyecto de base de datos con la cadena de conexión configurada desde el proyecto ASP.NET Web API causa un error.

Estoy obteniendo un error de tiempo de compilación al establecer una variable estática dentro de mi capa de proyecto de base de datos, se está estableciendo dentro del método de inicio Startup dentro de Startup.cs de mi API web ASP.NET.

Cuando este bloque de código está comentado, compila y se ejecuta correctamente, solo que no obtengo la cadena de conexión que necesito.

Lo peor es que el error en sí mismo no está descrito, no hay nada en el cuadro de error emergente y no dice nada más que hay un error.

El método es el siguiente:

public Startup(IConfiguration configuration)
{
    Configuration = configuration;

    // inicio del bloque con bug
    string cnn = configuration.GetConnectionString("MyConnectionStringConfig");
    MyProjectDataLayer.MyClassDataLayer.MyStaticMethodSettingConnectionString(cnn);
    // fin del bloque con bug
}

MyClassDataLayer y MyStaticMethodSettingConnectionString son públicas.

Ahora me doy cuenta de que aunque la “Lista de errores” está vacía, hay esta descripción de error en la ventana de “Salida”:

> C:\MyWebApi\Startup.cs(21,21,21,31): error CS0122: 'MyClassDataLayer' no es accesible debido a su nivel de protección
> Generación del proyecto "MyWebApi.csproj" finalizada -- FALLIDA.

La clase es la siguiente:

“`csharp
namespace MyProjectDataLayer
{
public class MyClassDataLayer : DbContext
{
private static string _staticCnn = "";

<pre><code> public static void MyStaticMethodSettingConnectionString(string cnnParam)
{
MyClassDataLayer._staticCnn = cnnParam;
}

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySql(connectionString: MyClassDataLayer._staticCnn, mySqlOptions => mySqlOptions.CharSetBehavior(CharSetBehavior.NeverAppend));
}

public DbSet<model001> md1 { get; set; }
public DbSet<model002> md2 { get; set; }
}
</code></pre>

}
“`

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “MyClassDataLayer no es accesible debido a su nivel de protección” indica que la clase MyClassDataLayer no es accesible desde la clase Startup, posiblemente porque no se declara como pública. Para solucionar este error, modifique la declaración de la clase MyClassDataLayer para que sea pública, de la siguiente manera:

    c#
    namespace MyProjectDataLayer
    {
    public class MyClassDataLayer : DbContext
    {
    // código de la clase aquí
    }
    }

    Una vez hecho esto, la clase Startup debería poder acceder a MyClassDataLayer y el error de compilación debería resolverse.

Comments are closed.