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.

Proporcione parámetros a EF Core Scaffold-DBContext en tiempo de ejecución/en código.

En nuestro proyecto, frecuentemente necesitamos volver a importar las definiciones de la base de datos para una serie de bases de datos diferentes. Antes de pasar a Entity Framework Core 3.1, utilizábamos generadores de edmx.

A través del comando Scaffold-DbContext en la consola del administrador de paquetes, podemos importar los modelos de la base de datos, pero necesitamos proporcionar manualmente la cadena de conexión y todos los demás parámetros específicos de la base de datos.

  1. ¿Existe alguna forma de llamar simplemente a “Scaffold-DbContext” sin ningún parámetro y que EF Core cargue los parámetros requeridos desde una configuración específica del proyecto o algo similar?
  2. De lo contrario, ¿existe una forma sencilla de llamar a Scaffold-DbContext desde una aplicación C#? Mi idea sería escribir una pequeña aplicación de consola que actualice los modelos llamando al comando Scaffold-DbContext con los parámetros específicos del proyecto.

¡Gracias!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai
    1. Sí, puedes crear un DbContextFactory en tu proyecto y configurarlo para que use un archivo de configuración para la cadena de conexión de la base de datos y otros parámetros. Aquí tienes un ejemplo de cómo hacerlo:

      “`C#
      public class MyDbContextFactory : IDbContextFactory
      {
      public MyDbContext CreateDbContext(string[] args)
      {
      var config = new ConfigurationBuilder()
      .AddJsonFile(“appsettings.json”)
      .Build();

         var connectionString = config.GetConnectionString("MyDbContext");
      
         var optionsBuilder = new DbContextOptionsBuilder<mydbcontext>();
         optionsBuilder.UseSqlServer(connectionString);
      
         return new MyDbContext(optionsBuilder.Options);
      

      }
      }


      En este ejemplo, utilizamos un archivo appsettings.json para almacenar la cadena de conexión para MyDbContext. Puedes crear este archivo en tu proyecto y agregar una cadena de conexión como esta: ```JSON { "ConnectionStrings": { "MyDbContext": "Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;MultipleActiveResultSets=true" } }

      Una vez que hayas definido el DbContextFactory, puedes llamar al comando Scaffold-DbContext sin ningún parámetro y utilizará el archivo de configuración para obtener los parámetros requeridos.

    2. Sí, puedes utilizar las herramientas de línea de comandos de EF Core para llamar al comando Scaffold-DbContext desde una aplicación C#. Puedes instalar las herramientas como un paquete en tu proyecto y luego utilizar el método Process.Start para ejecutar el comando. Aquí tienes un ejemplo:

      “`C#
      using System.Diagnostics;

      // …

      var psi = new ProcessStartInfo
      {
      FileName = “dotnet”,
      Arguments = $”ef dbcontext scaffold \”Server=(localdb)\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;MultipleActiveResultSets=true\” Microsoft.EntityFrameworkCore.SqlServer -o Models”,
      WorkingDirectory = @”C:\MyProject”
      };

      Process.Start(psi)?.WaitForExit();
      “`

      En este ejemplo, ejecutamos el comando Scaffold-DbContext para una base de datos de SQL Server y generamos los modelos en un directorio “Models” en el proyecto. Puedes modificar los argumentos para adaptarlos a tus necesidades.

Comments are closed.