Π― ΡΠ°Π±ΠΎΡΠ°Ρ Π½Π°Π΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ .Net Core 2, EF Core ΠΈ MySQL Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Code First.
Π£ ΠΌΠ΅Π½Ρ 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
ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ° ΠΏΠΎΠΌΠΎΠ³ΠΈ.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ 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: ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ)
@caleblloyd , ΡΠΏΠ°ΡΠΈΠ±ΠΎ, ΡΡΠ²Π°ΠΊ, Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅.
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΡ MySQL Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·ΡΠ²Π°Π» ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠΎΠ·ΠΆΠ΅ Ρ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°Π» ΡΠΎΡ ΠΆΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Ρ Pomelo.EntityFrameworkCore.MySql, ΠΈ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π» ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΠΆΠΈΠ΄Π°Π»ΠΎΡΡ.
!!! ΠΠ°ΠΌΠ½ΠΈ ΠΠΎΠΌΠ΅Π»ΠΎ !!!
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
@caleblloyd , ΡΠΏΠ°ΡΠΈΠ±ΠΎ, ΡΡΠ²Π°ΠΊ, Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅.
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΡ MySQL Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·ΡΠ²Π°Π» ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠΎΠ·ΠΆΠ΅ Ρ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°Π» ΡΠΎΡ ΠΆΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Ρ Pomelo.EntityFrameworkCore.MySql, ΠΈ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π» ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΠΆΠΈΠ΄Π°Π»ΠΎΡΡ.
!!! ΠΠ°ΠΌΠ½ΠΈ ΠΠΎΠΌΠ΅Π»ΠΎ !!!