Mi aplicación que se está portando a .NET core utilizará el nuevo EF Core con SQLite. Quiero crear automáticamente las estructuras de la base de datos y la tabla cuando la aplicación se ejecuta por primera vez. De acuerdo con la documentación principal de EF, esto se hace usando comandos manuales
dotnet ef migrations add MyFirstMigration
dotnet ef database update
Sin embargo, no quiero que el usuario final ingrese estos comandos y preferiría que la aplicación cree y configure la base de datos para el primer uso. Para EF 6 hay una funcionalidad como
Database.SetInitializer(new CreateDatabaseIfNotExists<MyContext>());
Pero en EF Core, estos no parecen existir. No puedo encontrar ningún ejemplo o documentación sobre algo equivalente para el núcleo de EF y no se menciona en la lista de características faltantes en la documentación del núcleo de EF. Ya tengo la configuración de las clases del modelo, así que podría escribir un código para inicializar la base de datos en función de los modelos, pero sería mucho más fácil si el marco lo hiciera automáticamente. No quiero construir automáticamente el modelo o migrar, solo crear las estructuras de la tabla en una nueva base de datos.
¿Me falta algo aquí o falta la función de tabla de creación automática en el núcleo de EF?
fuente
Mi respuesta es muy similar a la respuesta de Ricardo, pero siento que mi enfoque es un poco más sencillo simplemente porque su
using
función es tan importante que ni siquiera estoy seguro de cómo funciona exactamente en un nivel inferior.Entonces, para aquellos que desean una solución simple y limpia que cree una base de datos para usted donde sepa exactamente lo que está sucediendo bajo el capó, esto es para usted:
Esto básicamente significa que dentro del
DbContext
que creó (en este caso, se llama el míoTargetsContext
), puede usar una instancia delDbContext
para asegurarse de que las tablas definidas con en la clase se creen cuando Startup.cs se ejecuta en su aplicación.fuente
EnsureCreated
omite totalmente las migraciones y simplemente crea el esquema para usted, no puede mezclar esto con las migraciones.EnsureCreated
está diseñado para pruebas o prototipos rápidos en los que está de acuerdo con colocar y volver a crear la base de datos cada vez. Si está utilizando migraciones y desea que se apliquen automáticamente al inicio de la aplicación, puede utilizarcontext.Database.Migrate()
en su lugar.IHostingEnvironment
ahora está en desuso y que la alternativa recomendada esMicrosoft.AspNetCore.Hosting.IWebHostEnvironment
.Si obtiene el contexto a través de la lista de parámetros de Configure en Startup.cs, puede hacer esto:
fuente
Para EF Core 2.0+ tuve que adoptar un enfoque diferente porque cambiaron la API. A partir de marzo de 2019, Microsoft recomienda que coloque el código de migración de su base de datos en la clase de entrada de su aplicación, pero fuera del código de compilación de WebHost.
fuente
Si no ha creado migraciones, hay 2 opciones
1.Cree la base de datos y las tablas desde la aplicación Main:
2.crear las tablas si la base de datos ya existe:
Gracias a la respuesta de Bubi
fuente
EnsureCreated
oEnsureDeleted
oDatabase.Migrate
se producirá un error"