Pomelo.entityframeworkcore.mysql: Errores nvarchar y nvarchar (max) con el proyecto ASP.NET Core 3.0 predeterminado y la opción de identidad

Creado en 9 oct. 2019  ·  4Comentarios  ·  Fuente: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

pasos para reproducir

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

La cuestión

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

1064: tiene un error en la sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de 'max) NULL,

CONSTRAINT `PK_AspNetRoles` PRIMARY KEY (`Id`)

) 'en la línea 5

Más detalles técnicos

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

closed-user-error

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 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`)
);

Todos 4 comentarios

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 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.

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.

¿Fue útil esta página
0 / 5 - 0 calificaciones