Quiero recalcar que esto es .NET Core y los hilos sobre EF 6.0 no se aplica a este problema

He creado mi DbContext y añadió que en DI, sin embargo cuando hago dotnet ef database update -v no quiere crear las migraciones tabla __EFMigrationsHistory.

¿Hay algún otro comando que debo hacer primero o este es un error de EF Núcleo MySQL adaptador?

MainDbContext

using Microsoft.EntityFrameworkCore;
using MySQL.Data.EntityFrameworkCore.Extensions;
using Web.Models;

namespace Web.Infrastructure
{
    public class MainDbContext : DbContext
    {
        public DbSet<User> Users { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseMySQL("connection-string-here");
            base.OnConfiguring(optionsBuilder);
        }
    }
}

De Error

Encontrar DbContext clases…

Usando el contexto ‘MainDbContext’.

Utilizando la base de datos » db «en el servidor «localhost’.

MySql.De datos.MySqlClient.MySqlException: Tabla ‘db.__EFMigrationsHistory’ no existe

Tabla ‘db.__EFMigrationsHistory’ no existe
«

proyecto.json

{
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.1",
"type": "platform"
},
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.Mvc": "1.0.1",
"Microsoft.AspNetCore.Razor.Tools": {
"version": "1.0.0-preview2-final",
"type": "build"
},
"Microsoft.AspNetCore.Routing": "1.0.1",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Logging": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
"BundlerMinifier.Core": "2.2.301",
"WebMarkupMin.AspNetCore1": "2.2.1",
"MySql.Data.EntityFrameworkCore": "7.0.6-IR31",
"Microsoft.EntityFrameworkCore.Design": "1.0.0-preview2-final"
},
"tools": {
"Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
},
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dotnet5.6",
"portable-net45+win8"
]
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
},
"publishOptions": {
"include": [
"wwwroot",
"**/*.cshtml",
"appsettings.json",
"web.config"
]
},
"scripts": {
"prepublish": [ "bower install", "dotnet bundle" ],
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}

Temp Solución

Mediante la ejecución de dotnet ef migrations script puedo obtener el código SQL que se puede ejecutar directamente en MySQL. Después de que las migraciones se crea la tabla y todo funciona normalmente. Esta es la temperatura de la solución de lo que es malo. Todavía me pregunto ¿cuál es la manera «correcta» de la habilitación de las migraciones.

  • Por favor, especificar las versiones de los paquetes que usted utilice.
  • ¿Esta cadena de conexión te da acceso a una cuenta que tenga permiso para crear tablas? En otras palabras, son capaces de crear manualmente la tabla con esta cadena de conexión?
  • He añadido los paquetes.json. Por supuesto que tienen todos los permisos para la base de datos. Una vez que me agregue manualmente la tabla de migraciones trabajo y mi User modelo de la tabla se ha creado para mí y yo no puedo hacer operaciones con él.
  • Sólo me encontrado con el mismo problema con ef core + mysql tratando de seguir docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/new-db Añadir-Migraciones funciona bien, pero de la Actualización de la Base de datos arroja este error
  • Una solución es crear la siguiente tabla de forma manual antes de ejecutar «dotnet ef actualización de base de datos» CREATE TABLE `__EFMigrationsHistory` ( `MigrationId` nvarchar(150) NOT NULL, `ProductVersion` nvarchar(32) NOT NULL, PRIMARY KEY (`MigrationId`) );
InformationsquelleAutor sed | 2016-11-14

4 Comentarios

  1. 16

    Encontrado con el mismo problema al usar el estándar de Oracle proveedor.

    De acuerdo a esta pregunta Dot Net Entity Framework actualización de base de datos no crear tablas en la base de datos mysql no tiene la característica de las migraciones se ha implementado todavía.

    he seguido las sugerencias que la cambié a SapientGuardian proveedor y parece ser el mejor camino a seguir ahora.

    Edit: como se sugiere en los comentarios el Pomelo es la mejor opción, de principios de 2018. He escogido a través de otros proveedores, ya que mi respuesta original.

    • Me marca esto como una respuesta, sin embargo, creo que mejor es que se acaba de ejecutar directamente el script manualmente una vez. Estoy bastante seguro de que este error se corrige de todos modos ya.
    • Por desgracia parece que Oracle no dan una mierda y última vez que he comprobado que no era. Usted puede ejecutar una secuencia de comandos de forma manual una vez que si usted tiene la última estructura db ya. En mi caso fue en constante cambio, el sistema había alguna forma inicial, pero es una fase beta hubo muchos cambios para el orm tuvo que ser actualizada de acuerdo). Es agradable que alguien la prueba que es posible seguir con el proveedor predeterminado. La mejor de las suertes!
    • El Pomelo es ahora el recomendado uno. github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql
    • no. no se fija todavía. y sí, Pomelo.EntityFrameworkCore.MySql parece ser recomendado por ms, tiene más descargas de oracle y SapientGuardian, también tiene más git estrellas y con más frecuencia descargado
    • Problema permanece con el oficial de MySql paquete, pero el Pomelo parece funcionar
  2. 37

    De inflexión Marca G es un comentario en una respuesta.

    Una vez que el __EFMigrationsHistory de haber creado la tabla, el resto de la actualización debe ejecutar.

    CREATE TABLE `__EFMigrationsHistory` ( `MigrationId` nvarchar(150) NOT NULL, `ProductVersion` nvarchar(32) NOT NULL, PRIMARY KEY (`MigrationId`) );

    Alternativamente, generar la secuencia de comandos de la migración en su(s) y se aplican a la base de datos manualmente el uso de este comando en la Consola del Administrador de Paquetes:

    Script-Migration

    Si usted necesita para generar Todas las secuencias de comandos, puede utilizar este comando:

    Script-Migration -from 0
    • Este fijo que es para mí. +1 de mí 🙂
  3. 7

    Me encuentro con el mismo problema, OP contexto podrían ser ligeramente diferentes, pero aquí está mi respuesta en aras de la exhaustividad.

    Una de las maneras que usted puede ejecutar en este problema es si:

    • Crear una migración y actualización de la base de datos,
    • Más tarde, por alguna razón, se le cae el mesas (no la base de datos) y vuelva a ejecutar la actualización-databse comando de nuevo.

    En ese caso, usted recibirá el error reportado por OP

    MySql.De datos.MySqlClient.MySqlException: Tabla
    ‘db.__EFMigrationsHistory’ no existe

    La solución en este caso, es colocar la base de datos completa. Después de que la actualización-databse comando se ejecuta sucessfuly.

    No estoy seguro de si está relacionado con mysql, pero para reanudar :

    • Si se le cae las tablas pero el uso de una base de datos existente (que había anterior de las migraciones), el comando de actualización le dará una excepción.
    • Si te alejas de la base de datos completa, el comando de actualización funcionará perfectamente.
    • esto ayudó a .. con aspnet core .. más reciente es mejor .. por lo que siempre busque reciente respuestas o mensajes.
    • La solución funciona para algo más que para mysql. He estado golpeando mi cabeza contra la pared tratando de averiguar por qué yo no podía conseguir postgres para migrar correctamente. En mi caso yo podría ejecutarse localmente en windows 10 sin ningún problema, pero en la RHEL6 cuadro donde se ha de ejecutar la ahogaron. En este caso, abandonando el esquema (aproximadamente dejando sólo las tablas) trabajó en windows, pero no de RHEL, fue sólo cuando se me cayó de la base de datos que las cosas empezaron a trabajar.
    • Sólo asegúrese de que el usuario que está utilizando tiene el servidor de nivel de privilegios para create, y funciona muy bien!

Dejar respuesta

Please enter your comment!
Please enter your name here