Entity Framework - เริ่มใหม่ - เลิกทำ / ย้อนกลับการโอนย้ายทั้งหมด


168

ด้วยเหตุผลบางอย่างการย้ายถิ่นของฉันดูเหมือนจะเป็นปัญหา / เสียหาย / อะไรก็ตาม ฉันอยู่ในจุดที่ฉันต้องการเริ่มต้นใหม่ดังนั้นจึงมีวิธีการยกเลิกการโยกย้ายทั้งหมดลบประวัติและลบรหัสการโยกย้ายอย่างสมบูรณ์ดังนั้นฉันจึงกลับไปที่จตุรัสหนึ่งหรือไม่

เช่น) PM> Disable-MigrationsหรือRollback-Migrations

ฉันไม่ต้องการ "อัปเดต" เป็นขั้นตอนการย้ายข้อมูลดั้งเดิม (เช่นบางสิ่งบางอย่างเหมือนInitialSchemaเป้าหมาย) เพราะฉันหาไม่พบอีกต่อไป

คำตอบ:


358

คุณสามารถย้อนกลับการโยกย้ายใด ๆ โดยใช้:

Update-Database -TargetMigration:"MigrationName"

หากคุณต้องการย้อนกลับการโยกย้ายทั้งหมดคุณสามารถใช้:

Update-Database -TargetMigration:0

หรือเทียบเท่า:

Update-Database -TargetMigration:$InitialDatabase 

ในบางกรณีคุณสามารถลบฐานข้อมูลและคลาสการโยกย้ายทั้งหมด


6
ตามปกติคุณดีที่สุด
drzaus

2
ฉันไม่เข้าใจสหกรณ์โดยเฉพาะกล่าวว่า "ผมไม่ต้องการที่จะ 'ปรับปรุง' เพื่อขั้นตอนการย้ายถิ่นเดิม (คือสิ่งที่ต้องการเป้าหมาย InitialSchema) เพราะผมไม่สามารถหาได้อีกต่อไป." คำตอบนี้ทำในสิ่งที่เขาต้องการได้อย่างไร สิ่งที่ฉันคาดว่าจะเกิดขึ้นคือฉันจะอยู่ในสถานะที่ฉันต้องทำenable-migrationsอีกครั้ง เห็นได้ชัดว่ามีประโยชน์ แต่พวกเขาบรรลุสิ่งที่ OP ต้องการหรือไม่ (โปรดอย่าตอบด้วย "ดีเขายอมรับคำตอบ" ฉันพยายามเข้าใจสิ่งนี้ไม่ใช่สมาร์ทการ์ด)
Michael Blackburn

@MichaelBlackburn: หากคุณต้องการเรียกใช้enable-migrationsอีกครั้งและคุณกำลังพัฒนาฐานข้อมูลตั้งแต่เริ่มต้นคุณเพียงแค่ทำตามประโยคสุดท้าย: ลบฐานข้อมูลและรหัสการโยกย้ายทั้งหมดที่เกี่ยวข้อง หากคุณเริ่มใช้การย้ายข้อมูลด้วยฐานข้อมูลที่มีอยู่คุณต้องยกเลิกการย้ายข้อมูลทั้งหมดโดยใช้คำสั่งที่สองหรือสามจากนั้นลบMigrationHistoryตารางและรหัสที่เกี่ยวข้องกับการย้ายข้อมูลทั้งหมด ควรให้คุณเริ่มตำแหน่ง คุณสามารถรับฐานข้อมูลเริ่มต้นจากการสำรองข้อมูล (ก่อนใช้การย้ายข้อมูล) และลบรหัสที่เกี่ยวข้องกับการย้ายข้อมูลทั้งหมด
Ladislav Mrnka

4
@MichaelBlackburn: สิ่งที่ฉันหมายถึงคือโซลูชันอื่น ๆ ทั้งหมดที่ฉันเคยเห็นบอกให้คุณอัปเดตกลับไปเป็นชื่อการโยกย้ายครั้งแรกของคุณแต่ปัญหาของฉันคือว่าไม่มีการโยกย้ายครั้งแรกที่สะอาดในการอัปเดต (กลับ) เป็น - ฉันเพิ่ง ต้องการกำจัดการย้ายข้อมูลทั้งหมดโดยไม่คำนึงถึงวิธีการ ดังนั้นคำตอบนี้กล่าวถึงข้อกังวลของฉันกับ-TargetMigration:0
drzaus


8

เพื่อความชัดเจนหากใช้ LocalDb เมื่อคุณต้องการเริ่มต้นใหม่เพียงลบฐานข้อมูลผ่าน Database Explorer แล้วพิมพ์enable-migrations -forceใน Package Manager Console อย่าลบฐานข้อมูลผ่านทางโฟลเดอร์ App_Data หรือคุณจะมีดังต่อไปนี้ปัญหา


2
ระวังเมื่อทำสิ่งนี้เพราะมันจะเขียนทับ Migrations \ Configuration.cs ของคุณโดยไม่มีการเตือน!
cgatian

ขอบคุณสำหรับคำเตือนฉันเกือบจะทิ้งโค้ดในตอนแรกมันก็ดีที่มีรหัสของคุณทั้งหมดในครั้งเดียวที่มีแหล่งควบคุมเวอร์ชันสำหรับฐานข้อมูลของคุณ แต่ฉันไม่เห็นประโยชน์ใหญ่อื่น ๆ และเปลี่ยนกลับไปเป็นฐานข้อมูลก่อน ฉันใช้ Red Gate Sql เปรียบเทียบเพื่อติดตามเดลตาทั้งหมด
Brian Ogden


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