LINQ ไปยัง SQL ไม่ทำงานหรือไม่


17

มีเหตุผลใดที่จะใช้ Linq กับ SQL ต่อไปหรือดีกว่าที่จะย้ายไปใช้เทคนิค ORM เช่น EF, NHibernate เป็นต้น

เรากำลังใช้ Linq กับ SQL ในแอปพลิเคชันองค์กรขนาดใหญ่ใหม่ที่จะมีอยู่เป็นเวลานาน แรงจูงใจสำหรับแอปพลิเคชันระดับองค์กรใหม่นี้คือแอปพลิเคชันนี้เขียนขึ้นตามปกติใน Visual Basic และเนื่องจาก Microsoft หยุดการสนับสนุน ดูเหมือนว่าเรามีอยู่แล้ว แต่คราวนี้มาพร้อม DAL (Data Access Layer) ของเรา

ฉันได้อ่านบทความนี้แล้ว แต่เปรียบเทียบกับความอ่อนแอของ EF เท่านั้น


+1 ยิ่งใหญ่ Q. นี่เป็นสิ่งที่น่าสนใจสำหรับฉันฉันได้ทำการย้ายกระบวนงานที่เก็บไว้และสตริงการสืบค้น SQL ไปยัง LINQ ไปยัง SQL เพื่อให้อ่านง่ายขึ้นฉันไม่คิดว่ามันจะไม่ได้รับการพัฒนาอีกต่อไป
fearoffours

MS มีประเภทสไลด์โชว์. NET 4 เล็กน้อยที่บอกว่ายังไม่ตาย - แต่นั่นอาจหมายถึงหลายสิ่งหลายอย่าง พวกเขาปรับปรุงใน. NET 4.0: damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40
MetalMikester

ไม่มีอีกครั้ง. คำถามนี้ถูกถกเถียงกันแล้ว ad-nauseumใน StackOverflow คุณสามารถพูด FUD ได้ไหม?
Robert Harvey

คำตอบ:


11

หากคุณกำลังใช้งานอยู่และไม่พบปัญหาใด ๆ ฉันจะยึดติดกับโครงการที่มีอยู่เดิม

Linq2SQL นั้นค่อนข้างดี แต่มีข้อ จำกัด ORM - ถ้าคุณต้องการแมปวัตถุของคุณในรูปแบบที่ซับซ้อนกว่าแบบพื้นฐานที่ให้โดย Linq2SQL คุณจะต้องติดอยู่ Microsoft ได้แก้ไขข้อบกพร่องบางอย่างเมื่อพวกเขาออกมาพร้อมกับ. net 4 แต่ได้ระบุว่าพวกเขาจะไม่ทุ่มเททรัพยากรเพื่อขยาย

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


ฉันเห็นด้วยเท่านั้นไม่ตายจริงๆ แต่อยู่บนโต๊ะในการทดลองไม่ทางใดก็ทางหนึ่ง หากสิ่งต่าง ๆ ใช้งานได้และมีผลกระทบอย่างมากต่อการเปลี่ยนแปลงในตอนนี้ ... คุณอาจต้องการกลับมานั่งดูอีกครั้งและมองหาช่วงเวลาที่ดีในการเปลี่ยนมาใช้ EF / NHibernate อาจเป็นโครงการอัพเกรดทางการเงิน (ในที่สุดเรา ทุกคนต้องการงานขนมปังและเนยบนโต๊ะ)
cyberzed

@cyberzed: ฟังดูเหมือนเป็นข้อแก้ตัวที่ดีสำหรับงานที่ไม่จำเป็น
Robert Harvey

12

มันยังไม่ตาย แต่ Microsoft มุ่งเน้นไปที่ Entity Framework

ฉันใช้ LINQ กับ SQL ในโครงการขนาดเล็กและมันค่อนข้างดีเป็น data-layer ที่มีน้ำหนักเบาและฉันจะลองใช้อีกครั้งในโครงการขนาดใกล้เคียงกัน การดำเนินงาน LINQ ตัวเองเป็นสิ่งที่ดีจริงๆและจนกระทั่งเมื่อเร็ว ๆมากดีกว่าโครงการ NHibernate LINQ ในโครงการขนาดใหญ่ที่ฉันใช้ L2S ฉันพบว่ามันยากที่จะเกิดขึ้นกับรูปแบบหน่วยการทำงานที่ฉันมีความสุขเนื่องจากข้อ จำกัด กับคลาส 'DataContext' ของ L2S การพยายามใช้งานบางอย่างเช่น 'เซสชันต่อคำขอ' กับ L2S ดูเหมือนว่าจะยากหรือเป็นไปไม่ได้

ฉันยังไม่คิดว่า L2S เป็น ORM จริงเพราะมันไม่ได้ให้ตัวเลือกการทำแผนที่มากมายกับคุณ การออกแบบคลาสของคุณจำเป็นต้องทำตามสคีมาฐานข้อมูลของคุณ (ตารางต่อคลาส) มิฉะนั้นมันจะต่อสู้กับคุณทุกขั้นตอน อีกสิ่งหนึ่งที่ฉันไม่ชอบเกี่ยวกับ L2S คือความต้องการใช้ประเภทเฉพาะ ( EntitySetและEntityRef) เพื่อจัดการคอลเลกชันการอ้างอิงและการโหลดแบบสันหลังยาว ซึ่งหมายความว่าเป็นไปไม่ได้ที่จะรักษาโมเดล ORM ของผู้ไม่เชื่อเรื่องพระเจ้าโดยไม่ต้องเพิ่มเลเยอร์สิ่งที่เป็นนามธรรม

ปัญหาอื่นของฉันกับ L2S คือการพึ่งพา LINQ แต่เพียงผู้เดียวในการสร้างแบบสอบถาม ผู้ให้บริการ LINQ เขียนได้ดีมากและโดยทั่วไปจะสร้าง SQL ที่เหมาะสมสำหรับการสืบค้นส่วนใหญ่ แต่ฉันมีความกังวลว่ามีการสืบค้นที่ซับซ้อนมากขึ้นซึ่งไม่สามารถแสดงได้ดีกับ LINQ การใช้ L2S นั้นโดยทั่วไปคุณต้องกลับไปเรียกขั้นตอนการจัดเก็บในกรณีเหล่านี้ในขณะที่ (ตัวอย่าง) NHibernate มี API (ผู้ให้บริการ LINQ, QueryOver, HQL และอื่น ๆ ) ของ API ที่สามารถใช้เมื่อคุณต้องการควบคุม SQL ที่สร้างขึ้น

ในการป้องกันของ L2S เหนือ NHibernate มีค่าใช้จ่ายน้อยกว่ามากในการทำให้มันใช้งานได้


2

มันไม่ตายอย่างที่มันยังใช้งานได้ แต่ถ้ามันไม่ได้รับการพัฒนาต่อไปมันก็สมเหตุสมผลที่จะย้ายไปทำอย่างอื่น

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


2

มีเสถียรภาพมากขึ้นกว่า imho ตาย:

http://www.thinqlinq.com/default/LINQ-to-SQL-enhancements-for-2010.aspx

http://jonkruger.com/blog/2009/06/06/linq-to-sql-is-not-dead/

พวกเขาเปลี่ยนความพยายามในการปรับปรุงไปสู่ ​​Entity Framework ซึ่งเป็นสิ่งที่จำเป็นจริงๆหากผลิตภัณฑ์นั้นประสบความสำเร็จ คาดหวังว่าจะไม่มีอะไรใหม่นอกจากความเข้ากันได้และการแก้ไขข้อบกพร่องบน linq2sql ชั่วครู่หนึ่ง

ไซต์นี้ทำงานด้วย linq2sql จำนวนมากถ้าฉันไม่ผิด


+1 สำหรับ "เสถียร" วิธีที่ดีที่สุดในการดู L2S, imho มีความเสถียรและไม่ถูกขยาย / เปลี่ยนแปลงอีกต่อไป
quentin-starin

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

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

@ Jeremy คนอื่น ๆ ยังใช้ TeX อยู่หรือเปล่า?
ทางเลือกที่

1

มันแปลก แต่ฉันได้เห็นถ้อยคำนี้มาก (“ LINQ2SQL นั้นตายแล้ว”) และฉันไม่แน่ใจว่ามันมาจากไหน * มันเป็น Windows XP ที่ตายแล้ว Microsoft ยกเลิกการสนับสนุนและสร้างสิ่งใหม่ (และในสายตาของฉันดีขึ้น) แต่ผู้คนยังสามารถใช้ XP ได้อย่างอิสระเนื่องจากพวกเขามีอิสระที่จะใช้ Linq2SQL เป็นที่ยอมรับว่าฉันใช้ Linq2SQL เมื่อสร้างโมดูล DotNetNuke ที่กำหนดเอง อย่างไรก็ตามด้วยคุณสมบัติใหม่ใน EF4 เช่นการพัฒนารหัสครั้งแรก ( http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx) ) มันยากที่จะหาเหตุผลที่จะติดกับ Linq2SQL ฉันไม่เห็นเหตุผลที่ต้องทำและอัปเดตรหัส แต่สำหรับรหัสใหม่ฉันไม่รู้ว่าทำไมคุณไม่ต้องการใช้ EF4

* ในความซื่อสัตย์ทุกอย่างฉันรู้สึก…ครอบงำจิตใจมากเกินไป! ฉันขอโทษถ้ามันเป็นที่น่ารำคาญกับคนอื่น ๆ :)

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