สร้างสคริปต์ SQL เต็มรูปแบบจากการโยกย้ายรหัสแรกของ EF 5


145

ฉันจะใช้การโยกย้ายครั้งแรกของรหัส Entity Framework 5 เพื่อสร้างสคริปต์ฐานข้อมูลแบบเต็มจากสถานะเริ่มต้น (ว่าง) เป็นการย้ายข้อมูลล่าสุดได้อย่างไร

บล็อกโพสต์ที่บล็อก MSDNแนะนำให้ทำเช่นนี้ แต่ดูเหมือนว่าจะสร้างสคริปต์เปล่า:

Update-Database -Script -SourceMigration: $InitialDatabase

คำตอบ:


286

API ดูเหมือนจะมีการเปลี่ยนแปลง (หรืออย่างน้อยก็ไม่ได้ผลสำหรับฉัน)

การรันสิ่งต่อไปนี้ใน Package Manager Console ทำงานตามที่คาดไว้:

Update-Database -Script -SourceMigration:0

14
ฉันรู้ว่านี่เป็นคำตอบที่ถูกต้อง แต่คุณค้นพบวิธีที่ 0 ในโลกเมื่อพารามิเตอร์เป็นสตริง?!
Dave R

27
ทดลองใช้เพียงและข้อผิดพลาดจริงๆหลังจากที่พยายามทุกอย่างที่ฉันสามารถคิดที่จะหลอกลวงมันเข้าไปทำงาน :)
แมตต์วิลสัน

1
สิ่งนี้สร้างสำเนาที่แน่นอนของฐานข้อมูลหรือไม่ รวมเนื้อหาของตารางหรือไม่
Multitut

2
@ Multitut: ไม่เพียง แต่จะสร้างโครงสร้าง
Martin Clarke

6
เพียงในกรณีที่มีคนที่กำลังมองหาวิธีการที่จะทำเช่นนี้ใน EfCore dotnet ef migrations scriptและจบลงที่นี่เช่นฉันคำสั่งคือ: ข้อมูลเพิ่มเติมเกี่ยวกับเอกสาร: docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/…
Rafael Miceli

13

สำหรับใครก็ตามที่ใช้แกนโครงสร้างเอนทิตีสิ้นสุดที่นี่ นี่คือวิธีที่คุณทำ

# Powershell / Package manager console
Script-Migration

# Cli 
dotnet ef migrations script

คุณสามารถใช้พารามิเตอร์-Fromและ-Toเพื่อสร้างสคริปต์อัปเดตเพื่ออัปเดตฐานข้อมูลเป็นเวอร์ชันที่ระบุ

Script-Migration -From 20190101011200_Initial-Migration -To 20190101021200_Migration-2

https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/#generate-sql-scripts

มีหลายตัวเลือกสำหรับคำสั่งนี้

การโยกย้ายจากควรเป็นการโยกย้ายครั้งสุดท้ายที่ใช้กับฐานข้อมูลก่อนที่จะเรียกใช้สคริปต์ หากไม่มีการย้ายข้อมูลให้ระบุ0(นี่เป็นค่าเริ่มต้น)

การโยกย้ายไปยังการโยกย้ายครั้งสุดท้ายที่จะนำไปใช้กับฐานข้อมูลหลังจากที่เรียกใช้สคริปต์ ค่าเริ่มต้นนี้เป็นการโยกย้ายครั้งสุดท้ายในโครงการของคุณ

idempotentสคริปต์สามารถเลือกที่จะสร้าง สคริปต์นี้ใช้การย้ายข้อมูลหากยังไม่ได้ใช้กับฐานข้อมูล สิ่งนี้มีประโยชน์หากคุณไม่ทราบว่าการโยกย้ายครั้งล่าสุดที่นำไปใช้กับฐานข้อมูลนั้นเป็นอย่างไรหรือถ้าคุณกำลังปรับใช้กับฐานข้อมูลหลายฐาน


ใช้งานได้จนถึงจุดหนึ่ง เมื่อคุณเริ่มเปลี่ยนชื่อคอลัมน์มันจะเริ่มโยนข้อผิดพลาดการสร้าง DacPac เป็นทางออกที่ดีกว่า โดยเฉพาะอย่างยิ่งเมื่อคุณเริ่มใช้ Pipelines ใน CI / CD
Nick Turner

8

เพื่อเพิ่มคำตอบของ Matt wilson ฉันมีคลาสเอนทิตี้ของรหัสแรก แต่ไม่มีฐานข้อมูลเนื่องจากฉันไม่ได้สำรองข้อมูล ดังนั้นฉันจึงทำสิ่งต่อไปนี้ในโครงการ Entity Framework ของฉัน:

เปิดคอนโซลตัวจัดการแพคเกจใน Visual Studio และพิมพ์ต่อไปนี้:

Enable-Migrations

Add-Migration

ตั้งชื่อการโยกย้ายของคุณเช่น 'เริ่มต้น' จากนั้นสร้างการย้ายข้อมูล ในที่สุดพิมพ์ต่อไปนี้:

Update-Database

Update-Database -Script -SourceMigration:0

คำสั่งสุดท้ายจะสร้างตารางฐานข้อมูลจากคลาสเอนทิตี้ของคุณ (หากคลาสเอนทิตีของคุณมีรูปแบบที่ดี)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.