Marco de Entidades Core no crea base de datos sobre la base de datos actualizados

Estoy intentando generar mi base de datos usando el primer código. Cuando ejecuto el comando update-database, recibo que la base de datos no puede ser nula, pero esperaba que la base de datos se creara automáticamente. ¿Alguna idea de lo que me estoy perdiendo?

        services.AddControllers();
    }

    public class SmartSchoolContext : DbContext
    {
        public DbSet Alunos { get; set; }
        public DbSet Professores { get; set; }
        public DbSet Disciplinas { get; set; }
        public DbSet AlunosDisciplinas { get; set; }

        public SmartSchoolContext(DbContextOptions options) : base(options)
        {
        }

    }
}

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext(context => context.UseMySQL(Configuration.GetConnectionString("Default")));
    services.AddControllers();
}

Pregunta hecha hace 3 años, 4 meses, 29 días - Por compilerhero


3 Respuestas:

  • en startup.cs Configuración Método de servicios que tienes que añadir

    services.AddDbContext();
    

    en el método configure:

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env, DataContext context)
    {
       // migrate database changes on startup (includes initial db creation)
            context.Database.Migrate();
       // other logic
    
    }
    

    Nota: agregue y actualice la base de datos usando comando asegúrese de que su conexión de base está abierta

    Respondida el Dec 17, 2020 a las 15:17 - por debugdynamo

    Votos positivos: 0 | Votos negativos: 0

  • El problema que estás experimentando parece estar relacionado con la configuración de la base de datos en tu aplicación. A continuación te mostraré cómo puedes configurar tu contexto de base de datos para que EF Core cree automáticamente la base de datos si no existe.

    Primero, asegúrate de tener instalado el paquete NuGet Microsoft.EntityFrameworkCore.Tools en tu proyecto para poder ejecutar comandos de migración.

    Para que EF Core cree la base de datos si no existe, necesitas agregar un método en la clase Startup.cs de tu aplicación que aplique las migraciones pendientes al arrancar la aplicación:

    csharp
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env, SmartSchoolContext context)
    {
        if (env.IsDevelopment())
        {
            context.Database.Migrate();
        }
    
        app.UseRouting();
    
        // Resto de la configuración de tu aplicación
    }
    

    Este código verifica si el entorno de la aplicación es de desarrollo y aplica todas las migraciones pendientes en la base de datos al iniciar la aplicación.

    Además, asegúrate de haber especificado una cadena de conexión válida en tu archivo appsettings.json con la clave Default:

    json
    {
      "ConnectionStrings": {
        "Default": "tu_cadena_de_conexion"
      }
    }
    

    Con estos cambios, al iniciar tu aplicación en el entorno de desarrollo, EF Core debería crear automáticamente la base de datos si no existe y aplicar las migraciones pendientes. Después de realizar estos cambios, ejecuta nuevamente el comando update-database.

    Espero que esta solución te ayude a resolver tu problema. ¡Déjame saber si tienes alguna otra pregunta o inquietud!

    Respondida el Dec 18, 2020 a las 15:19 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás recibiendo indica que la propiedad Database del contexto SmartSchoolContext es nula. Esto puede ocurrir si no se ha inicializado correctamente el contexto o si no se ha configurado correctamente la cadena de conexión.

    Para resolver este problema, asegúrate de que la cadena de conexión en UseMySQL es correcta y que el contexto se inicializa correctamente en el método ConfigureServices.

    Aquí tienes un ejemplo actualizado del método ConfigureServices:

    csharp
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext(options =>
        {
            options.UseMySQL(Configuration.GetConnectionString("Default"));
            options.UseLazyLoadingProxies(); // esto es opcional, pero habilita el lazy loading
        });
    
        services.AddControllers();
    }
    

    También debes asegurarte de que la propiedad Database del contexto no es nula antes de llamar al método Update-Database. Puedes hacerlo agregando la siguiente validación en el método ConfigureServices:

    csharp
    public void ConfigureServices(IServiceCollection services)
    {
        var connectionString = Configuration.GetConnectionString("Default");
        if (string.IsNullOrEmpty(connectionString))
        {
            throw new InvalidOperationException("La cadena de conexión no se ha configurado correctamente.");
        }
    
        services.AddDbContext(options =>
        {
            options.UseMySQL(connectionString);
            options.UseLazyLoadingProxies();
        });
    
        services.AddControllers();
    }
    

    Una vez que hayas realizado estos cambios, vuelve a ejecutar el comando update-database y debería crear correctamente la base de datos.

    Respondida el Dec 18, 2020 a las 15:27 - por Gemini

    Votos positivos: 0 | Votos negativos: 0