Pomelo.entityframeworkcore.mysql: .Net Core2 EF MySQL ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ столбца внСшнСго ΠΊΠ»ΡŽΡ‡Π° Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 8 Ρ„Π΅Π²Ρ€. 2018  Β·  4ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

Π― Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ Π½Π°Π΄ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ .Net Core 2, EF Core ΠΈ MySQL Π² качСствС сСрвСра Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… с использованиСм ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Code First.

Π£ мСня 2 Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

  1. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ
  2. Π Π°Π±ΠΎΡ‚Π½ΠΈΠΊ

Π’Π°Π±Π»ΠΈΡ†Π° User - это основная Ρ‚Π°Π±Π»ΠΈΡ†Π°, которая содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅, Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° Employee - это дочСрняя Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΅ΡΡ‚ΡŒ столбСц ID_User, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

 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; }
    }

Everythihg Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΡˆΠ΅ сопоставлСниС ΠΈ Ρƒ мСня Π΅ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΠ±Π΅ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ….

Π’Π΅ΠΏΠ΅Ρ€ΡŒ я Ρ…ΠΎΡ‡Ρƒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ столбСц ID_User Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Employee Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, я внСс ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния Π² свою модСль:

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; }
    }

ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ сопоставлСния:

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

ПослС запуска ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ dotnet ef migrations add empuser ΠΎΠ½Π° сгСнСрировала ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ:

migrationBuilder.DropForeignKey (
имя: "FK_Employee_User_ID_User",
Ρ‚Π°Π±Π»ΠΈΡ†Π°: Β«Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊΒ»);

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° я Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… dotnet ef, ΠΎΠ½ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

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

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π° ΠΏΠΎΠΌΠΎΠ³ΠΈ.

Бпасибо

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

@caleblloyd , спасибо, Ρ‡ΡƒΠ²Π°ΠΊ, Ρƒ мСня Π΅ΡΡ‚ΡŒ исправлСниС.

На самом Π΄Π΅Π»Π΅ я использовал ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ΠΎΡ€ MySQL для этого, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

ПозТС я ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» Ρ‚ΠΎΡ‚ ΠΆΠ΅ сцСнарий с Pomelo.EntityFrameworkCore.MySql, ΠΈ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π» Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ оТидалось.

!!! Камни ПомСло !!!

ВсС 4 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ SQL ? ΠŸΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ это синтаксичСская ошибка SQL, поэтому ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ подсказки.

Он Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ SQL, я ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π». Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Ρ‚Ρƒ ΠΆΠ΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ
ΠΊΠΎΠ³Π΄Π° я Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ 'dotnet ef migrations script'

Π’ Ρ‡Ρ‚, 8 фСвраля 2018 Π³., 23:16 mguinness [email protected] написал:

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ SQL
https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/#generating-a-sql-script ?
ΠŸΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ это синтаксичСская ошибка SQL, поэтому ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ подсказки.

-
Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ это, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡΠ²Π»ΡΠ΅Ρ‚Π΅ΡΡŒ Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ‚Π΅ΠΌΡ‹.
ΠžΡ‚Π²Π΅Ρ‚ΡŒΡ‚Π΅ Π½Π° это письмо Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, просмотритС Π΅Π³ΠΎ Π½Π° GitHub
https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/483#issuecomment-364192130 ,
ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ
https://github.com/notifications/unsubscribe-auth/AIcy3L4ZQKlICMAtRFQJk8RuFTFBNWbfks5tSzLygaJpZM4R98p8
.

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΆΡƒΡ€Π½Π°Π»Π° Β«MicrosoftΒ» Π½Π° Β«Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡΒ», Π·Π°Ρ‚Π΅ΠΌ запуститС ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ, ΠΈ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ SQL. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ (Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ Microsoft: ошибка Π½Π° Microsoft: информация)

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

@caleblloyd , спасибо, Ρ‡ΡƒΠ²Π°ΠΊ, Ρƒ мСня Π΅ΡΡ‚ΡŒ исправлСниС.

На самом Π΄Π΅Π»Π΅ я использовал ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ΠΎΡ€ MySQL для этого, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

ПозТС я ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» Ρ‚ΠΎΡ‚ ΠΆΠ΅ сцСнарий с Pomelo.EntityFrameworkCore.MySql, ΠΈ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π» Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ оТидалось.

!!! Камни ПомСло !!!

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ