Entity Framework Code เป็นอันดับแรกที่ไร้ความหมาย / ไร้ประโยชน์ในการผลิตและกลยุทธ์ EF ที่ดีสำหรับการผลิตคืออะไร?


29

ฉันเพิ่งเขียนโปรแกรมด้วย Entity Framework 4.1 Code แรกและฉันชอบการพัฒนา แต่มีเพียงแผนสุดท้ายและรายการคุณลักษณะที่เปลี่ยนแปลงอย่างรวดเร็วฉันกำลังปรับเปลี่ยน Class / Database อย่างต่อเนื่องเพื่อตอบสนองความต้องการของแอปพลิเคชัน

ในการพัฒนาไม่มีข้อมูลอยู่และฉันสามารถลบฐานข้อมูลทั้งหมดได้อย่างง่ายดายดังนั้นมันจึงถูกสร้างขึ้นใหม่ด้วยสคีมาใหม่ แต่เห็นได้ชัดเมื่อมีชีวิต - นี่แย่มาก!

วิธีแก้ปัญหาเดียวที่ฉันเห็นคือการวางตารางเมทาดาทาและทำให้ฐานข้อมูลซิงค์ด้วยตนเองหรือโดยทั่วไปแล้วปล่อยและทำใหม่

ฉันชอบวิธีแรกเป็นการส่วนตัวเพราะฉันคิดว่าการเพิ่มคอลัมน์ / ตารางจะง่ายกว่าการสร้างและย้ายข้อมูล แต่ถ้าฉันไม่ได้พลาดสิ่งนี้จะย้ายออกไปจาก Code First อย่างสมบูรณ์

ดังนั้นคำถามคือ Code First เป็นเพียงการพัฒนาครั้งแรกและกลยุทธ์ที่ดีในการจัดการ EF สำหรับสภาพแวดล้อมการผลิตคืออะไร


เคยมีความหมายที่จะถามสิ่งนี้สองสามวันไม่แน่ใจว่ามันจะดีที่สุดที่นี่หรือบน Stack Overflow ...
wilhil

คำตอบ:


15

ความคิดเห็นของฉันคือการสร้างฐานข้อมูลอัตโนมัติของรหัสแรกมีไว้เพื่อการพัฒนาเท่านั้น ฉันตอบคำถามที่คล้ายกันใน Stack Overflow ที่ฉันอธิบายทั้งวิธีอัปเกรดฐานข้อมูลและเหตุใดฟังก์ชันการทำงานอัตโนมัติไม่ดีในการผลิต:

การอัพเกรดฐานข้อมูลเป็นงานกึ่งคู่มือ ไม่ควรมีเวทย์มนตร์ที่ยังไม่ได้ทดสอบอยู่โดยอัตโนมัติปัจจุบัน EF 4.1 ยังไม่มีเวทย์มนตร์ใด ๆ (มีเพียงงานนำเสนอเกี่ยวกับฟีเจอร์ที่ทีม ADO.NET กำลังทำงาน)

คุณสามารถตรวจสอบคำถามนี้เพื่อให้เข้าใจมากขึ้นว่าเว็บไซต์ได้รับการอัพเกรดอย่างไร


สวัสดีอีกครั้ง! - คุณรวดเร็วสำหรับคำถามของ EF! :) ... ไม่รู้ว่าฉันจะอยู่ที่ไหนถ้าไม่มีเธอ!
Wilhil

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

2
ตัวอย่างสาธารณะครั้งแรกของ "Migrations" เปิดตัว blogs.msdn.com/b/adonet/archive/2011/07/27/…
Ladislav Mrnka

ขอบคุณมองที่ตอนนี้! ฉันชอบการพัฒนาด้วย Code First แต่ฉันกังวลใจมาก / กังวลเกี่ยวกับการเปลี่ยนแปลงในภายหลัง!
wilhil

คุณจัดการกับกรณีที่ StoredProcs หรือ Views ถูกสร้างขึ้นโดยตรงใน DB เพื่อวัตถุประสงค์อื่น ๆ เช่นการรายงานที่ไม่ได้ใช้โดยแอปพลิเคชัน เราจำเป็นต้องทราบว่า SPs ใดที่ได้รับผลกระทบจากการเปลี่ยนแปลงสคีมาในโค้ดก่อน
softveda

5

รักษาสคริปต์การอัพเกรด

ในฐานข้อมูลเองให้บำรุงรักษาตารางที่มีการบันทึกเร็กคอร์ดกับเวอร์ชันของสกีมา

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

อย่าลืมสำรองข้อมูลฐานข้อมูลก่อน


ขั้นตอนถัดไป: คุณถูกไล่ออก;) อัปเดตฐานข้อมูลไม่ควร ahppen โดยอัตโนมัติโดยไม่มีการสำรองข้อมูลก่อน - และอาจหยุดทำงานไม่ใช่เมื่อผู้ใช้หนึ่งคนใช้เวอร์ชั่นใหม่กว่า วิธีการของคุณสมบูรณ์แบบ - เพื่อปิดการปรับใช้ที่มีขนาดใหญ่ขึ้นด้วยข้อผิดพลาดมากมาย
TomTom

@TomTom: ขึ้นอยู่กับ เรากำลังเรียกใช้แอปพลิเคชัน DB อย่างไม่มีที่ติเป็นเวลาหลายปีซึ่งทำสิ่งนี้: สคีมาเปลี่ยนแปลงโดยอัตโนมัติสำหรับรีลีสใหม่ซึ่งกระทำโดยแอปพลิเคชันเมื่อตรวจพบเวอร์ชันเก่าเกินไป การสำรองข้อมูลจะทำทุกวันเช่นกันและเราให้การเปลี่ยนแปลงแบบแผนทั้งหมดเข้ากันได้ย้อนหลัง (เฉพาะการเพิ่มเขตข้อมูลและตารางโดยไม่ลบเลย) ฉันยอมรับว่ามาตรการที่คุณกล่าวถึงมีความสำคัญเมื่อการเปลี่ยนแปลงนั้นไม่เข้ากันได้แบบย้อนหลังและคุณไม่สามารถรับประกันว่าแอปพลิเคชันไคลเอนต์ทั้งหมดจะได้รับการอัปเดตพร้อมกัน (ตัวอย่างเช่นสำหรับ DB องค์กรขนาดใหญ่)
Doc Brown

ด้านบนหากการเปลี่ยนแปลงนั้นไม่สำคัญ ลองเปลี่ยนเขตข้อมูลในตาราง 2tb (และใช่ฉันจัดการกับเรื่องนี้ - และมันไม่ได้เป็น data warehoue) คุณได้ใส่ตัวเองในสถานการณ์ที่คุณกำลังสะสมหนี้ทางเทคนิคเพราะคุณสามารถเพิ่มฟิลด์ที่เคยไม่เคยทำความสะอาด
TomTom

2

คำถามมีข้อบกพร่องอย่างใดอย่างหนึ่งที่ทำให้การเชื่อมต่อระหว่างรูปแบบการเขียนโปรแกรมและสภาพแวดล้อมรันไทม์ที่ไม่มี

รหัสแรกคือตัวเร่งความเร็วการพัฒนาเป็นหลักและไม่ได้เชื่อมต่อกับระบบรันไทม์จริงๆ

ในการผลิตคุณจะต้องมีการตั้งค่าที่ปฏิเสธความเป็นไปได้ที่จะทำการลบ / อัพเดตแบบจำลอง db

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