เครื่องมือข้อมูล SQL Server & Entity Framework - มีการทำงานร่วมกันที่นี่?


11

ออกมาจากโครงการโดยใช้ Linq2Sql ฉันสงสัยว่าอีกอัน (ใหญ่กว่า) อาจผลักฉันเข้าไปในอ้อมแขนของ Entity Framework ฉันได้ทำการอ่านข้อมูลเกี่ยวกับเรื่องนี้แล้ว แต่สิ่งที่ฉันไม่สามารถหาได้นั้นเป็นเรื่องราวที่สอดคล้องกันเกี่ยวกับวิธีที่ SQL Server Data Tools และ Entity Framework ควร / สามารถ / อาจใช้ร่วมกันได้

  • พวกเขารู้สึกแยกกันโดยสิ้นเชิงและการใช้พวกมันเข้าด้วยกันเป็นวิธีที่ผิด?
  • พวกเขามีมุมฉากเต็มเปาและฉันพลาดประเด็นไปหรือเปล่า?

เหตุผลบางอย่างที่ฉันคิดว่าฉันอาจต้องการ:

  • SSDT นั้นยอดเยี่ยมสำหรับการ 'คอมไพล์' (ตรวจสอบ) และ SQL เวอร์ชันและสกีมาที่ง่ายดาย
  • แต่เรื่องราว 'การโยกย้าย / อัปเดต' SSDT ไม่น่าเชื่อถือ (สำหรับฉัน): "อัปเดตทุกอย่าง" ทำงานได้ดีสำหรับสคีมา แต่ไม่มีทาง (AFAIK) ที่จะสามารถทำงานกับข้อมูลได้
  • ในทางกลับกันฉันไม่ได้ลองการโยกย้าย EF เพื่อทราบว่ามันมีปัญหาที่คล้ายกันหรือไม่ แต่บิต Up / Down ดูค่อนข้างมีประโยชน์

ดูเหมือนว่าเป็นสิ่งที่ทีม EF กำลังพิจารณา github.com/aspnet/EntityFramework/issues/4321
Snæbjørn

คำตอบ:


9

ขอผมมองอีกมุมหนึ่ง การบำรุงรักษาฐานข้อมูล Entity Framework ไร้ประโยชน์อย่างเต็มที่ในองค์กรหรือโครงการฐานข้อมูลขนาดใหญ่

ปัญหาคือ:

  • อัพเดตสกีมาอัตโนมัติ นี่ไม่ใช่สิ่งที่ฉันต้องการอย่างแน่นอนเพราะมันเป็นการละเมิดพื้นฐานการบำรุงรักษาฐานข้อมูลทั้งหมด ปัญหาคือ: (a) คนที่ใช้งานเวอร์ชันที่ใหม่กว่าอัปเดตฐานข้อมูลแทนที่จะได้รับปัญหาและ (b) การอัปเดตจะถูกกำหนดเวลาด้วย dba โดยทั่วไปจะทำการสำรองข้อมูลครั้งแรก ดังนั้นการอัปเดตอัตโนมัติจะไร้ประโยชน์

  • การสร้าง Db ใช้งานได้เฉพาะกับเคสที่ด้อยลงโดยทั่วไป อย่าพยายามใช้คุณสมบัติฐานข้อมูลขั้นสูงด้วยซ้ำ ตัวอย่างเซิร์ฟเวอร์ Sql: รวมเขตข้อมูลในดัชนีตัวกรองบนดัชนีการแบ่งพาร์ติชันการบีบอัดกฎการตรวจสอบสำหรับเขตข้อมูล

  • การย้าย - สมมติว่ากรณีขอบเสื่อมโทรมอีกครั้ง: ไม่มีการแปลงข้อมูลหรืออัปเดตหลายขั้นตอนได้อย่างง่ายดาย ตัวอย่าง: ตาราง X มีฟิลด์ "ผู้ใช้" ประวัติที่บันทึกผู้ใช้ทำบางสิ่ง การตั้งค่าใหม่มีตารางผู้ใช้ดังนั้นจำเป็นต้องสร้างตารางผู้ใช้จากนั้นสร้างผู้ใช้จากนั้นสร้างเขตข้อมูลอ้างอิงผู้ใช้ในตาราง x จากนั้นอัปเดตสิ่งนี้ด้วยผู้ใช้ที่อยู่ในตารางผู้ใช้แล้วลบเขตข้อมูลผู้ใช้

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

ตอนนี้ SSDT - เป็นเครื่องมือที่ยอดเยี่ยมสำหรับการกำหนดเวอร์ชันของฐานข้อมูลเฉพาะที่ดีกว่า Entity Framework เพราะมันใช้งานได้จริง เช่นเดียวกับใน: มันบันทึกคุณสมบัติทั้งหมด ไม่มีฐานข้อมูลใดที่ฉันมีฉันแทบจะไม่สามารถใช้รหัสก่อน - เพราะเรามักจะมีดัชนีกรองอย่างน้อย;) EF จะไม่ได้รับฉันถึง 10% ของสิ่งที่ฉันต้องการ

แนวทางของเราคือ:

  • ออกแบบฐานข้อมูลในฐานข้อมูลจากนั้นซิงค์ลงกับโมดูล SSDT ที่ได้รับการเช็คอินการซิงค์ Schema ช่วยให้นักพัฒนาอัปเดตเวอร์ชันได้อย่างรวดเร็ว มีฐานข้อมูลหลักที่เชื่อถือได้เสมอซึ่งมีรุ่นปัจจุบันอยู่ที่ใดที่หนึ่ง (บนเซิร์ฟเวอร์พิเศษ) ดังนั้นเราจึงมีรุ่นอ้างอิงเพื่อใช้งาน

  • สร้างสคริปต์เดลต้าตามต้องการสำหรับรีลีสที่รับเวอร์ชันและมีกลไกที่ดีในการปรับใช้กับฐานข้อมูล


3

มีมากกว่าหนึ่งวิธีในการใช้ EF กับฐานข้อมูล SQL Server

  1. รหัส - แรก ... คุณเขียนคลาสและ EF สร้างตารางที่เกี่ยวข้อง
  2. ฐานข้อมูลก่อน ... คุณออกแบบตารางและ EF สร้างชั้นเรียน

EF ไม่จำเป็นต้องทำงานทั้งหมดให้คุณ EF จะรับคุณประมาณ 80 ถึง 95 เปอร์เซ็นต์ที่นั่น อีก 5 ถึง 20 เปอร์เซ็นต์ของความพยายามในการพัฒนาฐานข้อมูลของคุณจะได้รับการเสริมด้วยการปรับแต่งเช่น Views และ Stored Procedure

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


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