Pomelo.entityframeworkcore.mysql: .Net Core2 EF MySQL tiene problemas al cambiar la columna de clave externa a anulable

Creado en 8 feb. 2018  ·  4Comentarios  ·  Fuente: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

Estoy trabajando en una aplicación en la que estoy usando .Net Core 2, EF Core y MySQL como servidor de base de datos a través del enfoque Code First.

Tengo 2 mesas:

  1. Usuario
  2. Empleado

La tabla de usuarios es la tabla principal que contiene la información del usuario y la tabla de empleados es la tabla secundaria que tiene una columna ID_User como se muestra a continuación:

 public class User : BaseEntity
    {
        public int ID_User { get; set; }
        public string Name { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }

        public virtual ICollection<Employee> Employees{get;set;}
    }



 public class Employee : Entity
    {
        public int ID_Employee { get; set; }
        public string Name { get; set; }

        public int ID_User { get; set; }

        public virtual User User { get; set; }
    }

Todo funciona perfectamente cuando utilizo el mapeo anterior y tengo datos aprobados en ambas tablas.

Ahora, quiero hacer que la columna ID_User en la tabla de empleados sea anulable

Para implementar este cambio hice el siguiente cambio en mi modelo:

public class Employee : Entity
    {
        public int ID_Employee { get; set; }
        public string Name { get; set; }

        public int? ID_User { get; set; }

        public virtual User User { get; set; }
    }

y en el archivo de mapeo:

builder.HasOne (x => x.User) .WithMany (y => y.Employees) .HasForeignKey (z => z.ID_User) .IsRequired (falso);

Después de ejecutar el comando dotnet ef migrations add empuser, generó el siguiente código de migración:

MigrationBuilder.DropForeignKey (
nombre: "FK_Employee_User_ID_User",
tabla: "Empleado");

    migrationBuilder.AlterColumn<int>(
        name: "ID_User",
        table: "Employee",
        nullable: true,
        oldClrType: typeof(int));

    migrationBuilder.AddForeignKey(
        name: "FK_Employee_User_ID_User",
        table: "Employee",
        column: "ID_User",
        principalTable: "User",
        principalColumn: "ID_User",
        onDelete: ReferentialAction.Restrict);

Ahora, cuando ejecuto la actualización de la base de datos dotnet ef, me da el siguiente error:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CONSTRAINT FK_Employee_User_ID_User' at line 1

Por favor ayuda.

Gracias

Comentario más útil

@caleblloyd , gracias, tengo esta solución.

En realidad, estaba usando el conector oficial de MySQL para esto, lo que estaba causando el problema.

Más tarde probé el mismo escenario con Pomelo.EntityFrameworkCore.MySql y funcionó exactamente igual que se esperaba.

!!! Pomelo Rocks !!!

Todos 4 comentarios

¿Puedes generar el SQL ? Parece que es un error de sintaxis SQL, por lo que debería proporcionar algunas pistas.

No genera ningún SQL, ya lo he probado. Da el mismo error
cuando ejecuto el comando 'dotnet ef migrations script'

El jueves 8 de febrero de 2018 a las 23:16 mguinness [email protected] escribió:

¿Puedes generar el SQL
https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/#generating-a-sql-script ?
Parece que es un error de sintaxis SQL, por lo que debería proporcionar algunas pistas.

-
Estás recibiendo esto porque eres el autor del hilo.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/483#issuecomment-364192130 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AIcy3L4ZQKlICMAtRFQJk8RuFTFBNWbfks5tSzLygaJpZM4R98p8
.

Cambie el registro de "Microsoft" a "Información", luego ejecute sus migraciones y registrará SQL. Ejemplo (cambiar Microsoft: error a Microsoft: información)

https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/blob/master/test/EFCore.MySql.FunctionalTests/appsettings.json

@caleblloyd , gracias, tengo esta solución.

En realidad, estaba usando el conector oficial de MySQL para esto, lo que estaba causando el problema.

Más tarde probé el mismo escenario con Pomelo.EntityFrameworkCore.MySql y funcionó exactamente igual que se esperaba.

!!! Pomelo Rocks !!!

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