Ejecute el comando Script-Migration.
Entity Framework Core 3.0.0 inicializó 'ApplicationDbContext' usando el proveedor 'Pomelo.EntityFrameworkCore.MySql' con las opciones: MaxPoolSize = 128 ServerVersion 5.7.22 MySql
El script SQL generado para ASP.NET Core Identity contiene errores. Recibo mensajes de error cuando intento ejecutar (solo el primer CREATE TABLE) del script en mi base de datos.
Parece que nvarchar y nvarchar (max) son los problemas.
CREAR TABLA AspNetRoles
(
Id
nvarchar (450) NO NULO,
Name
nvarchar (256) NULL,
NormalizedName
nvarchar (256) NULL,
ConcurrencyStamp
nvarchar (max) NULL,
RESTRICCIÓN PK_AspNetRoles
LLAVE PRIMARIA ( Id
)
);
Se encontraron 4 errores durante el análisis.
Tipo de datos no reconocido. (cerca de "nvarchar" en la posición 39)
Tipo de datos no reconocido. (cerca de "nvarchar" en la posición 75)
Tipo de datos no reconocido. (cerca de "nvarchar" en la posición 117)
Tipo de datos no reconocido. (cerca de "nvarchar" en la posición 161)
Consulta SQL:
CREAR TABLA AspNetRoles
( Id
nvarchar (450) NOT NULL, Name
nvarchar (256) NULL, NormalizedName
nvarchar (256) NULL, ConcurrencyStamp
nvarchar (max) NULO, RESTRICCIÓN PK_AspNetRoles
CLAVE PRIMARIA ( Id
))
MySQL dijo: Documentación
CONSTRAINT `PK_AspNetRoles` PRIMARY KEY (`Id`)
) 'en la línea 5
Versión de MySQL: 5.7.22
Sistema operativo: Windows 10
Pomelo.EntityFrameworkCore.MySql versión: 3.0.0-rc1.final
Versión de Microsoft.AspNetCore.App: 3.0
Al intentar reproducir # 863, obtengo el mismo error en el comando dotnet ef update database
, que usa las mismas clases de migración bajo el capó. Comprobando esto ahora.
Esto podría suceder, si crea un nuevo proyecto ASP.NET Core (con la opción de autenticación habilitada), cambie el proveedor de EF Core a Pomelo.EntityFrameworkCore.MySql
y luego ejecute un comando de migración o actualización.
El problema es que VS asumió que va a usar SQL Server, por lo que trató de ayudarlo y ya agregó la migración inicial CreateIdentitySchema
a los archivos .\Data\Migrations\00000000000000_CreateIdentitySchema.cs
(que contienen Up
y Down
operaciones) y .\Data\Migrations\00000000000000_CreateIdentitySchema.Designer.cs
(que contiene el modelo de destino altamente dependiente de la base de datos), que se generaron utilizando el proveedor de SQL Server.
De hecho, es un paso menos de lo que ocuparse, si está utilizando SQL Server. Sin embargo, contendrá una migración incorrecta si está utilizando cualquier otro proveedor de base de datos.
Si está utilizando simplemente MySQL y no también de SQL Server, la forma más fácil de solucionar este problema es primero asegúrese de que UseMySql()
está siendo llamado en su ConfigureServices
método:
`` c #
options.UseMySql (
Configuration.GetConnectionString ("DefaultConnection"));
Then delete the entire `Migrations` folder and just run something similar to the following command, to recreate the initial migration compatible with MySQL:
migraciones de dotnet ef agregan CreateIdentitySchema
After that, the newly created initial migration will be compatible with MySQL and other operations based on that migration will be as well.
For example, the `CREATE TABLE` script for `AspNetRoles` when creating a migration script (by using `dotnet ef migrations script`) will look like this:
```sql
CREATE TABLE `AspNetRoles` (
`Id` varchar(255) NOT NULL,
`Name` varchar(256) NULL,
`NormalizedName` varchar(256) NULL,
`ConcurrencyStamp` longtext NULL,
CONSTRAINT `PK_AspNetRoles` PRIMARY KEY (`Id`)
);
Esto podría suceder, si crea un nuevo proyecto ASP.NET Core (con la opción de autenticación habilitada), cambie el proveedor de EF Core a
Pomelo.EntityFrameworkCore.MySql
y luego ejecute un comando de migración o actualización.El problema es que VS asumió que va a usar SQL Server, por lo que trató de ayudarlo y ya agregó la migración inicial
CreateIdentitySchema
a los archivos.\Data\Migrations\00000000000000_CreateIdentitySchema.cs
(que contienenUp
yDown
operaciones) y.\Data\Migrations\00000000000000_CreateIdentitySchema.Designer.cs
(que contiene el modelo de destino altamente dependiente de la base de datos), que se generaron utilizando el proveedor de SQL Server.
en Pomelo.EntityFrameworkCore.MySql Versión 2.2, funciona sin Eliminar y volver a crear CreateIdentitySchema,
El script de creación de tabla generado
CREATE TABLE `aspnetroles` (
`Id` varchar(255) NOT NULL,
`Name` varchar(256) DEFAULT NULL,
`NormalizedName` varchar(256) DEFAULT NULL,
`ConcurrencyStamp` longtext,
PRIMARY KEY (`Id`),
UNIQUE KEY `RoleNameIndex` (`NormalizedName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
sin errores,
Espero que 3.0 + funcione igual en cuanto a compatibilidad y disponibilidad.
¿Hay alguna razón para este cambio?
Gracias,
en Pomelo.EntityFrameworkCore.MySql Versión 2.2, funciona sin Eliminar y volver a crear CreateIdentitySchema
Si funcionó para usted en Pomelo 2.2 sin ningún cambio, entonces es genial, pero no se puede generalizar porque depende en gran medida de su configuración (y tipo de clave).
Como se escribió anteriormente, debe volver a generar la migración inicial al crear un nuevo proyecto, para asegurarse de obtener una migración y una definición de modelo válidas. Si no lo hace, está solo y es posible que deba modificar un poco el código generado para que funcione (esto se puede hacer sin demasiado esfuerzo, dependiendo de su conocimiento de MySQL).
Ha habido algunos cambios importantes para la versión 3.0 (que deben etiquetarse apropiadamente), por lo que para cualquier actualización mayor o menor, pruebe su código primero en su entorno de desarrollo y preparación antes de moverlo a producción.
sin errores,
[...]
¿Hay alguna razón para este cambio?
¿De qué errores y cambios en 3.0 estás hablando concretamente?
Ha habido muchos cambios de 2.2.6 a 3.0.0, así que no dude en publicarnos una clase de modelo problemática, su definición, la migración generada y el script SQL resultante, para que podamos hablar sobre cualquier problema que tenga.
Comentario más útil
Esto podría suceder, si crea un nuevo proyecto ASP.NET Core (con la opción de autenticación habilitada), cambie el proveedor de EF Core a
Pomelo.EntityFrameworkCore.MySql
y luego ejecute un comando de migración o actualización.El problema es que VS asumió que va a usar SQL Server, por lo que trató de ayudarlo y ya agregó la migración inicial
CreateIdentitySchema
a los archivos.\Data\Migrations\00000000000000_CreateIdentitySchema.cs
(que contienenUp
yDown
operaciones) y.\Data\Migrations\00000000000000_CreateIdentitySchema.Designer.cs
(que contiene el modelo de destino altamente dependiente de la base de datos), que se generaron utilizando el proveedor de SQL Server.De hecho, es un paso menos de lo que ocuparse, si está utilizando SQL Server. Sin embargo, contendrá una migración incorrecta si está utilizando cualquier otro proveedor de base de datos.
Si está utilizando simplemente MySQL y no también de SQL Server, la forma más fácil de solucionar este problema es primero asegúrese de que
UseMySql()
está siendo llamado en suConfigureServices
método:`` c #
options.UseMySql (
Configuration.GetConnectionString ("DefaultConnection"));
migraciones de dotnet ef agregan CreateIdentitySchema