ก่อนอื่นถ้าคุณเริ่มต้นโครงการใหม่ไปที่ Entity Framework ("EF") - ตอนนี้จะสร้าง SQL ที่ดีกว่า (เช่น Linq ไปจนถึง SQL ทำ) และง่ายต่อการบำรุงรักษาและมีประสิทธิภาพมากกว่า Linq ถึง SQL (" L2S ") ในฐานะที่เป็น. NET 4.0 ฉันคิดว่า Linq to SQL เป็นเทคโนโลยีที่ล้าสมัย MS เปิดกว้างมากเกี่ยวกับการไม่พัฒนา L2S อย่างต่อเนื่อง
1) ประสิทธิภาพ
นี่เป็นเรื่องยุ่งยากที่จะตอบ สำหรับการดำเนินงานส่วนใหญ่เดียว ( CRUD ) คุณจะพบประสิทธิภาพที่เทียบเท่ากับเทคโนโลยีทั้งสามนี้ คุณต้องรู้ว่า EF และ Linq กับ SQL ทำงานอย่างไรเพื่อใช้งานอย่างเต็มที่ สำหรับการดำเนินการในปริมาณมากเช่นแบบสอบถามแบบสำรวจความคิดเห็นคุณอาจต้องการคอมไพล์ EF / L2S "คอมไพล์" ของคุณซึ่งเฟรมเวิร์กไม่จำเป็นต้องสร้าง SQL ใหม่ตลอดเวลาหรือคุณอาจพบปัญหาเรื่องความยืดหยุ่น (ดูการแก้ไข)
สำหรับการอัปเดตจำนวนมากที่คุณกำลังอัปเดตข้อมูลจำนวนมาก SQL ดิบหรือโพรซีเดอร์ที่เก็บไว้จะทำงานได้ดีกว่าโซลูชัน ORM เสมอเนื่องจากคุณไม่จำเป็นต้องรวบรวมข้อมูลผ่านทางสายไปยัง ORM เพื่อทำการอัปเดต
2) ความเร็วในการพัฒนา
ในสถานการณ์ส่วนใหญ่ EF จะใช้ SQL / procs ที่จัดเก็บแบบเปล่าเมื่อถึงความเร็วของการพัฒนา นักออกแบบของ EF สามารถอัปเดตโมเดลของคุณจากฐานข้อมูลของคุณเมื่อมีการเปลี่ยนแปลง (ตามคำขอ) ดังนั้นคุณจะไม่พบปัญหาการซิงโครไนซ์ระหว่างรหัสวัตถุและรหัสฐานข้อมูลของคุณ ครั้งเดียวที่ฉันจะไม่พิจารณาใช้ ORM คือเมื่อคุณทำแอปพลิเคชันประเภทการรายงาน / แดชบอร์ดที่คุณไม่ได้ทำการอัปเดตใด ๆ หรือเมื่อคุณกำลังสร้างแอปพลิเคชันเพียงเพื่อดำเนินการบำรุงรักษาข้อมูลดิบบนฐานข้อมูล
3) รหัสเรียบร้อย / บำรุงรักษา
ในทางตรงกันข้าม EF จะเอาชนะ SQL / sprocs เนื่องจากความสัมพันธ์ของคุณเป็นแบบจำลองการรวมในรหัสของคุณค่อนข้างบ่อย ความสัมพันธ์ของเอนทิตีเกือบจะปรากฏชัดต่อผู้อ่านสำหรับการค้นหาส่วนใหญ่ ไม่มีอะไรเลวร้ายยิ่งไปกว่าการเปลี่ยนจากระดับไปเป็นระดับแก้จุดบกพร่องหรือผ่านหลายระดับ SQL / ระดับกลางเพื่อให้เข้าใจว่าเกิดอะไรขึ้นกับข้อมูลของคุณ EF นำแบบจำลองข้อมูลของคุณมาไว้ในโค้ดของคุณในวิธีที่ทรงพลังมาก
4) ความยืดหยุ่น
Procs ที่จัดเก็บและ SQL ดิบนั้น "ยืดหยุ่น" ได้มากกว่า คุณสามารถใช้ประโยชน์จาก sprocs และ SQL เพื่อสร้างการสืบค้นที่เร็วขึ้นสำหรับกรณีเฉพาะที่แปลกและคุณสามารถใช้ประโยชน์จากฟังก์ชั่นฐานข้อมูลเนทิฟได้ง่ายกว่าที่คุณสามารถทำได้ด้วยและ ORM
5) โดยรวม
อย่าจมดิ่งลงไปในการแบ่งขั้วที่ผิดพลาดในการเลือก ORM เทียบกับการใช้กระบวนงานที่เก็บไว้ คุณสามารถใช้ทั้งในแอปพลิเคชันเดียวกันและคุณควร การดำเนินการจำนวนมากควรดำเนินการตามขั้นตอนที่เก็บไว้หรือ SQL (ซึ่งสามารถเรียกได้โดย EF) และควรใช้ EF สำหรับการดำเนินงาน CRUD ของคุณและความต้องการระดับกลางส่วนใหญ่ของคุณ บางทีคุณอาจเลือกที่จะใช้ SQL เพื่อเขียนรายงานของคุณ ฉันเดาว่าคุณธรรมของเรื่องราวนั้นเหมือนกับที่เคยเป็นมา ใช้เครื่องมือที่เหมาะสมสำหรับงาน แต่ความผอมของมันก็คือ EF ปัจจุบันดีมาก ๆ (ณ . NET 4.0) ใช้เวลาในการอ่านและทำความเข้าใจในเชิงลึกแบบเรียลไทม์และคุณสามารถสร้างแอพที่น่าทึ่งและมีประสิทธิภาพสูงได้อย่างง่ายดาย
แก้ไข : EF 5 ทำให้ส่วนนี้ง่ายขึ้นเล็กน้อยด้วยการสืบค้นอัตโนมัติ LINQแต่สำหรับสิ่งที่มีปริมาณมากจริง ๆ คุณจะต้องทดสอบและวิเคราะห์สิ่งที่เหมาะสมที่สุดสำหรับคุณในโลกแห่งความเป็นจริง