Pomelo.entityframeworkcore.mysql: μ—”ν‹°ν‹° 이름 λ°”κΎΈκΈ°

에 λ§Œλ“  2020λ…„ 02μ›” 20일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

μ—”ν‹°ν‹° 이름을 λ°”κΎΈλ©΄ μ΄λ¦„λ§Œ λ°”κΎΈλŠ” λŒ€μ‹  ν…Œμ΄λΈ”μ΄ μ‚­μ œλ˜κ³  μƒμ„±λ©λ‹ˆλ‹€.

closed-question type-question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

이것은 Pomeloκ°€ μ•„λ‹Œ EF의 κ³ μœ ν•œ ν•œκ³„μž…λ‹ˆλ‹€. EFλŠ” 일반적으둜 ν…Œμ΄λΈ” μ‚­μ œ/생성과 이름 λ°”κΎΈκΈ°λ₯Ό ꡬ뢄할 수 μ—†μŠ΅λ‹ˆλ‹€.

이름 λ³€κ²½μž„μ„ μ•Œλ €μ£ΌλŠ” νŠΈλ¦­μ€ μ—”ν„°ν‹° 클래슀의 속성을 톡해 λ˜λŠ” OnModelCreating fluent APIλ₯Ό 톡해 μˆ˜λ™μœΌλ‘œ ν…Œμ΄λΈ” 이름을 μ„€μ •ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

μˆœμ„œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. μ›λž˜ μ—”ν„°ν‹° 이름을 μ‚¬μš©ν•˜μ—¬ ν…Œμ΄λΈ” 이름을 μƒˆ κ°’μœΌλ‘œ μ„€μ •ν•©λ‹ˆλ‹€. 이 μƒˆ 이름이 μƒˆ 엔터티에 λŒ€ν•΄ μ˜¬λ°”λ₯Έμ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. 그렇지 μ•ŠμœΌλ©΄ μΆ”κ°€ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ΄ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예: builder.Entity<OriginalEntity>().ToTable("RenamedEntity");

  1. λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μƒμ„±ν•©λ‹ˆλ‹€. 그러면 엔터티에 λŒ€ν•œ μ˜¬λ°”λ₯Έ 이름 λ°”κΎΈκΈ° ν…Œμ΄λΈ” λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ΄ μƒμ„±λ©λ‹ˆλ‹€.
    이 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ΄ μ˜¬λ°”λ₯Έμ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. Pomelo 2.2.6을 μ‚¬μš©ν•˜λŠ” 경우 migrationBuilder.DropPrimaryKey 및 AddPrimaryKey ν•­λͺ©μ„ ν™•μΈν•˜κ³  μ‚­μ œν•˜μ‹­μ‹œμ˜€. μ΄λŸ¬ν•œ ν•­λͺ©μ€ MySQL에 ν•„μš”ν•˜μ§€ μ•Šκ³  λ©±λ“±μ„± SQL 슀크립트 생성에 λ¬Έμ œκ°€ λ°œμƒν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 이것은 3.1μ—μ„œ μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

  2. μ‹€μ œ μ—”ν‹°ν‹° 클래슀의 이름을 λ°”κΏ‰λ‹ˆλ‹€.

  3. μƒˆ μ—”ν„°ν‹° μ΄λ¦„μœΌλ‘œ λͺ¨λΈ μŠ€λƒ…μƒ·μ„ μ—…λ°μ΄νŠΈν•˜λ €λ©΄ λ‹€λ₯Έ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μƒμ„±ν•©λ‹ˆλ‹€.

그런 λ‹€μŒ .ToTable("RenamedEntity"); λ₯Ό μ œκ±°ν•˜μ—¬ κ·œμΉ™ 기반 ν…Œμ΄λΈ” λͺ…λͺ…μœΌλ‘œ λŒ€μ²΄ν•˜λ €λ©΄ λ‹€μŒμ„ μˆ˜ν–‰ν•˜μ‹­μ‹œμ˜€.

  1. .ToTable("RenamedEntity"); μ œκ±°ν•©λ‹ˆλ‹€. ν…Œμ΄λΈ” 이름이 μ •ν™•ν•˜λ©΄ κ·œμΉ™ 기반 이름이 ν˜„μž¬ 이름과 κ°™μ•„μ•Ό ν•©λ‹ˆλ‹€.

  2. ν…Œμ΄λΈ” 이름이 λ‹€μ‹œ λ°”λ€Œμ§€ μ•Šμ•˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ μ΅œμ’… λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μƒμ„±ν•©λ‹ˆλ‹€. κ·Έλ ‡λ‹€λ©΄ λͺ¨λ“  단계λ₯Ό 되돌리고 이름을 μˆ˜μ •ν•œ λ‹€μŒ λ‹€μ‹œ μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€. λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ΄ λΉ„μ–΄ 있으면 되돌릴 수 μžˆμŠ΅λ‹ˆλ‹€.

아직 ν…ŒμŠ€νŠΈν•˜μ§€λŠ” μ•Šμ•˜μ§€λ§Œ μ•„λ§ˆλ„ μ—­μˆœμœΌλ‘œ μˆ˜ν–‰ν•  수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€. 즉:

  1. μ—”ν„°ν‹°μ˜ 이름을 λ°”κΎΈκ³  ν˜„μž¬ ν…Œμ΄λΈ” μ΄λ¦„μœΌλ‘œ .ToTable λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
  2. λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μƒμ„±ν•©λ‹ˆλ‹€.
  3. .ToTable 속성 제거
  4. λ‹€λ₯Έ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μƒμ„±ν•©λ‹ˆλ‹€.

μžμ„Έν•œ λ‚΄μš©μ€ λ‹€μŒ μŠ€νƒ μ˜€λ²„ν”Œλ‘œ μ§ˆλ¬Έμ„ μ°Έμ‘°ν•˜μ„Έμš”.

https://stackoverflow.com/questions/13296996/entity-framework-migrations-renaming-tables-and-columns

λͺ¨λ“  3 λŒ“κΈ€

이것은 Pomeloκ°€ μ•„λ‹Œ EF의 κ³ μœ ν•œ ν•œκ³„μž…λ‹ˆλ‹€. EFλŠ” 일반적으둜 ν…Œμ΄λΈ” μ‚­μ œ/생성과 이름 λ°”κΎΈκΈ°λ₯Ό ꡬ뢄할 수 μ—†μŠ΅λ‹ˆλ‹€.

이름 λ³€κ²½μž„μ„ μ•Œλ €μ£ΌλŠ” νŠΈλ¦­μ€ μ—”ν„°ν‹° 클래슀의 속성을 톡해 λ˜λŠ” OnModelCreating fluent APIλ₯Ό 톡해 μˆ˜λ™μœΌλ‘œ ν…Œμ΄λΈ” 이름을 μ„€μ •ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

μˆœμ„œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. μ›λž˜ μ—”ν„°ν‹° 이름을 μ‚¬μš©ν•˜μ—¬ ν…Œμ΄λΈ” 이름을 μƒˆ κ°’μœΌλ‘œ μ„€μ •ν•©λ‹ˆλ‹€. 이 μƒˆ 이름이 μƒˆ 엔터티에 λŒ€ν•΄ μ˜¬λ°”λ₯Έμ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. 그렇지 μ•ŠμœΌλ©΄ μΆ”κ°€ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ΄ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예: builder.Entity<OriginalEntity>().ToTable("RenamedEntity");

  1. λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μƒμ„±ν•©λ‹ˆλ‹€. 그러면 엔터티에 λŒ€ν•œ μ˜¬λ°”λ₯Έ 이름 λ°”κΎΈκΈ° ν…Œμ΄λΈ” λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ΄ μƒμ„±λ©λ‹ˆλ‹€.
    이 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ΄ μ˜¬λ°”λ₯Έμ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. Pomelo 2.2.6을 μ‚¬μš©ν•˜λŠ” 경우 migrationBuilder.DropPrimaryKey 및 AddPrimaryKey ν•­λͺ©μ„ ν™•μΈν•˜κ³  μ‚­μ œν•˜μ‹­μ‹œμ˜€. μ΄λŸ¬ν•œ ν•­λͺ©μ€ MySQL에 ν•„μš”ν•˜μ§€ μ•Šκ³  λ©±λ“±μ„± SQL 슀크립트 생성에 λ¬Έμ œκ°€ λ°œμƒν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 이것은 3.1μ—μ„œ μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

  2. μ‹€μ œ μ—”ν‹°ν‹° 클래슀의 이름을 λ°”κΏ‰λ‹ˆλ‹€.

  3. μƒˆ μ—”ν„°ν‹° μ΄λ¦„μœΌλ‘œ λͺ¨λΈ μŠ€λƒ…μƒ·μ„ μ—…λ°μ΄νŠΈν•˜λ €λ©΄ λ‹€λ₯Έ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μƒμ„±ν•©λ‹ˆλ‹€.

그런 λ‹€μŒ .ToTable("RenamedEntity"); λ₯Ό μ œκ±°ν•˜μ—¬ κ·œμΉ™ 기반 ν…Œμ΄λΈ” λͺ…λͺ…μœΌλ‘œ λŒ€μ²΄ν•˜λ €λ©΄ λ‹€μŒμ„ μˆ˜ν–‰ν•˜μ‹­μ‹œμ˜€.

  1. .ToTable("RenamedEntity"); μ œκ±°ν•©λ‹ˆλ‹€. ν…Œμ΄λΈ” 이름이 μ •ν™•ν•˜λ©΄ κ·œμΉ™ 기반 이름이 ν˜„μž¬ 이름과 κ°™μ•„μ•Ό ν•©λ‹ˆλ‹€.

  2. ν…Œμ΄λΈ” 이름이 λ‹€μ‹œ λ°”λ€Œμ§€ μ•Šμ•˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ μ΅œμ’… λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μƒμ„±ν•©λ‹ˆλ‹€. κ·Έλ ‡λ‹€λ©΄ λͺ¨λ“  단계λ₯Ό 되돌리고 이름을 μˆ˜μ •ν•œ λ‹€μŒ λ‹€μ‹œ μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€. λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ΄ λΉ„μ–΄ 있으면 되돌릴 수 μžˆμŠ΅λ‹ˆλ‹€.

아직 ν…ŒμŠ€νŠΈν•˜μ§€λŠ” μ•Šμ•˜μ§€λ§Œ μ•„λ§ˆλ„ μ—­μˆœμœΌλ‘œ μˆ˜ν–‰ν•  수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€. 즉:

  1. μ—”ν„°ν‹°μ˜ 이름을 λ°”κΎΈκ³  ν˜„μž¬ ν…Œμ΄λΈ” μ΄λ¦„μœΌλ‘œ .ToTable λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
  2. λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μƒμ„±ν•©λ‹ˆλ‹€.
  3. .ToTable 속성 제거
  4. λ‹€λ₯Έ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μƒμ„±ν•©λ‹ˆλ‹€.

μžμ„Έν•œ λ‚΄μš©μ€ λ‹€μŒ μŠ€νƒ μ˜€λ²„ν”Œλ‘œ μ§ˆλ¬Έμ„ μ°Έμ‘°ν•˜μ„Έμš”.

https://stackoverflow.com/questions/13296996/entity-framework-migrations-renaming-tables-and-columns

기본적으둜 _some_ κ²½μš°μ— ν…Œμ΄λΈ” 이름 λ°”κΎΈκΈ°λ₯Ό 감지할 수 μžˆλŠ” νœ΄λ¦¬μŠ€ν‹±μ΄ κ΅¬ν˜„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ 이름 λ°”κΎΈκΈ°λŠ” λ‚˜μ€‘μ— μƒμ„±λœ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ μ½”λ“œλ₯Ό ν™•μ‹€νžˆ ν™•μΈν•˜κ³  ν•„μš”ν•œ 경우 DropTable 및 CreateTable ν˜ΈμΆœμ„ RenameTable 둜 λ³€κ²½ν•˜λ €λŠ” μž‘μ—… 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.

EF Coreμ—λŠ” μ΄λŸ¬ν•œ μžλ™ 생성 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ 이름 λ°”κΎΈκΈ° ν…Œμ΄λΈ”μ΄ μžˆμŠ΅λ‹ˆλ‹€.

        migrationBuilder.DropPrimaryKey(
            name: "PK_LogFieldsConfiguration",
            table: "LogFieldsConfiguration");

        migrationBuilder.RenameTable(
            name: "LogFieldsConfiguration",
            newName: "LogFieldsConfigurations");

        migrationBuilder.AddPrimaryKey(
            name: "PK_LogFieldsConfigurations",
            table: "LogFieldsConfigurations",
            column: "Id");
이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰