Entity Framework 4 / POCO - จะเริ่มที่ไหนดี [ปิด]


183

ฉันเคยเขียนโปรแกรมมาระยะหนึ่งแล้วและเคยใช้ LINQ-To-SQL และ LINQ-To-Entities มาก่อน (แม้ว่าเมื่อใช้เอนทิตีมันมีความสัมพันธ์แบบ Entity / Table 1-1 - กล่าวคือไม่แตกต่างจาก L2SQL มาก)

ฉันอ่านเกี่ยวกับ Inversion of Control, หน่วยงาน, POCO และรูปแบบพื้นที่เก็บข้อมูลจำนวนมากและต้องการใช้วิธีการนี้ในแอปพลิเคชันใหม่ของฉัน

สิ่งที่ฉันกำลังดิ้นรนคือการหาคู่มือเริ่มต้นที่ชัดเจนและกระชับสำหรับ EF4 ซึ่งไม่ถือว่าเป็นความรู้ของ EF1

คำถามเฉพาะที่ฉันต้องการคำตอบคือ:

รหัสแรก / รุ่นแรก ข้อดี / ข้อเสียเกี่ยวกับ EF4 (เช่นจะเกิดอะไรขึ้นถ้าฉันทำรหัสก่อนเปลี่ยนรหัสในภายหลังและจำเป็นต้องสร้างแบบจำลองฐานข้อมูลของฉันใหม่ - ข้อมูลได้รับการเก็บรักษาและแปลงหรือลดลงหรือไม่)

สมมติว่าฉันจะใช้รหัสก่อน (ฉันต้องการดูว่า EF4 แปลงให้เป็น DB schema ได้อย่างไร) ฉันจะเริ่มต้นอย่างไร บ่อยครั้งที่ฉันเห็นบทความที่มีไดอะแกรมเอนทิตีระบุว่า "นี่คือโมเดลเอนทิตี้ของฉันตอนนี้ฉันกำลังจะไป ... " - น่าเสียดายที่ฉันไม่ชัดเจนว่าพวกเขากำลังสร้างโมเดลในตัวออกแบบหรือไม่ สร้างรหัสจากนั้นหยุดการสร้างรหัสอัตโนมัติเพิ่มเติมหรือ - พวกเขาได้เข้ารหัส (POCO) แล้วหรือยัง ชั้นเรียนและอย่างใดนำเข้ามาในมุมมอง deisgner?

ฉันคิดว่าสิ่งที่ฉันต้องการจริงๆคือความเข้าใจว่า "เวทมนต์" มาจากไหนและจะเพิ่มมันด้วยตัวเองได้อย่างไรถ้าฉันไม่เพียงแค่สร้างโมเดล EF โดยตรงจากฐานข้อมูล

ฉันรู้ว่าคำถามนั้นค่อนข้างคลุมเครือ แต่ฉันไม่รู้ว่าฉันไม่รู้อะไร - ดังนั้นการอินพุต / การแก้ไข / การชี้แจงใด ๆ

ฉันไม่คิดว่าจะมีใครมานั่งที่นี่และสอนฉันให้กับ EF - ฉันต้องการบทเรียนที่ดี / ฟอรัม / บล็อก / อื่น ๆ สำหรับมือใหม่ที่สมบูรณ์


3
ระวังจริงๆด้วยอายุการใช้งานของการเชื่อมต่อของคุณ: bit.ly/fi83NVมันเป็นสิ่งที่คุณควรระวังจริงๆเมื่อการสรุปบริบทเป็นที่เก็บ ดูเหมือนว่าจะใช้งานได้ แต่จริง ๆ แล้วช้ากว่าการเชื่อมต่อที่เปิดมากขึ้นเรื่อย ๆ
BritishDeveloper

@ BRitishDeveloper - คำแนะนำที่ดีมาก สิ่งนี้ทำให้เราออกไป แต่ตรงกันข้าม - เราใช้คอนเทนเนอร์ IoC เพื่อดึงข้อมูลที่เก็บและมีปัญหาที่บริบทที่กำหนดให้กับที่เก็บจะปิดการเชื่อมต่อหลังจากผ่านไประยะเวลาหนึ่ง แต่จะไม่ถูกตั้งค่าตามการกำจัด / คล้ายคลึงกัน ในที่สุดเราก็ขยายบริบทของเราเองด้วย IsDisposed () ที่ตรวจสอบกับสถานะการกำจัดตามปกติและสถานะการเชื่อมต่อที่ช่วยให้เราสามารถสร้างอีกหากจำเป็น
พื้นฐาน

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

1
@Basiclife ฉันพบปัญหาเดียวกัน :) ฉันตั้งใจจะเขียนความคิดของฉันเกี่ยวกับการอัพเดตเอนทิตีที่ถอดออกมาซักพัก
BritishDeveloper

คำตอบ:


56

บทความเหล่านี้อาจเป็นที่สนใจ ... ซีรีส์เข้าสู่ข้อดีและข้อเสียของวิธีการ POCO

http://blogs.msdn.com/b/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx

http://blogs.msdn.com/b/adonet/archive/2009/05/28/poco-in-the-entity-framework-part-2-complex-types-deferred-loading-and-explicit-loading aspx

http://blogs.msdn.com/b/adonet/archive/2009/06/10/poco-in-the-entity-framework-part-3-change-tracking-with-poco.aspx

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


2
ในฐานะที่เป็นคนที่คุ้นเคยกับ Entity Framework โดยใช้นักออกแบบนี่เป็นบทนำที่ยอดเยี่ยมสำหรับ POCO
nathanchere

1
หากคุณกำลังมองหาหน่วยงานติดตามงานอยู่ที่blogs.msdn.com/b/adonet/archive/2009/06/16/…
Mike

11

ฉันเจอสิ่งนี้แล้ว: http://blogs.msdn.com/adonet/pages/feature-ctp-walkthrough-code-only-for-the-entity-framework.aspx

ซึ่งจะให้รหัสทีละขั้นตอนแก่คุณก่อน มันต้องใช้ CTP 3 สำหรับ EF4 (ดาวน์โหลดลิงค์จากบทความนั้น)

นี่เป็นสิ่งที่ใกล้เคียงกับที่ฉันเคยเป็นมาก่อน (แม้ว่าจะเป็นทางออกที่ไม่ต้องพึ่งพา CTP ก็น่าจะดีกว่า)


หมายเหตุ: CTP นี้เริ่มต้นสำหรับ VS2010 Beta แต่ยังรองรับ VS2010 RTM
พื้นฐาน

7

ฉันขอแนะนำให้คุณใช้เวลาครึ่งชั่วโมงหรือมากกว่านั้นและสร้างโมเดล EF1.0 ที่เสถียรใน VS ปัจจุบันของคุณ ซึ่งจะทำให้คุณเข้าใจการอุปมาอุปมัยและแนวคิดของ EF 4.0 ได้นานขึ้น เพียงชักลูกค้าง่าย ๆ ผลิตภัณฑ์และคำสั่งซื้อ db ... ฉันแนะนำให้คุณทำเองและไม่ใช้ Northwind


4

นี่เป็นคำถามที่ดี แต่ยากที่จะติดตามเสมอเนื่องจาก Entity Framework ยังคงเติบโต น่าจะเป็นสถานที่ที่ดีที่สุดที่จะเริ่มต้นที่จะอยู่ถึงวันที่ในอนาคตคือหน้า EF ไมโครซอฟท์

ลิงค์อื่น ๆ ไม่กี่ฉันพบว่ามีประโยชน์ในขณะที่ Googling (เน้นที่ Code First):


3

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


3

โครงสร้างโครงการของเขาดูเหมือนเป็นโครงการเก่าที่ฉันกำลังทำอยู่ เป็นเพลงแจ๊สสำหรับ WCF ทั้งหมดซึ่งฉันกระตือรือร้นในการรีเฟรชตัวเอง การเชื่อมโยงที่มั่นคง
Merritt

2

นี่คือคำแนะนำเกี่ยวกับเทมเพลต POCO สำหรับ Entity Framework ที่ดูค่อนข้างดี นอกจากนี้คุณยังอาจต้องการที่จะตรวจสอบบล็อกของทีม ADO.NET หากคุณต้องการเริ่มต้น (EF v1.0) เพื่อเป็นพื้นฐานสำหรับความรู้เกี่ยวกับ EF ของคุณฉันพบว่าหนังสือ Julia Lerman ของProgramming Entity Frameworkสมบูรณ์มาก


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

2
เกี่ยวกับหนังสือของจูเลีย Lerman มันคุ้มค่าที่จะกล่าวถึงว่าเธอเป็นคนที่ทำงานรุ่นที่สองครอบคลุม EF4: learnentityframework.com/LearnEntityFramework/book/... ฉันจำได้ว่าฉันได้อ่านที่ไหนสักแห่งว่าวันที่ประกาศวางตลาดคือเดือนพฤษภาคมปีนี้ แต่ฉันไม่สามารถหาแหล่งที่มาได้อีก นอกจากนี้ฉันเพิ่งพบไซต์นี้: nakedobjects.net/home/index2.shtml
Slauma

Slauma ลิงก์ที่คุณให้มาดูเหมือนอย่างที่ฉันต้องการ - ยกเว้นว่ามันจะใช้ห้องสมุด "Naked Obects" ของบุคคลที่สามซึ่งดูเหมือนว่าจะสับสนกับความซับซ้อน แต่อย่างใด - หนึ่งนาทีฉันคิดว่าคุณจะแตก
Basic

2

อย่ามีตัวแทนที่จะแสดงความคิดเห็นในคำตอบ แต่นี่คือการติดตามถึงคำตอบ Jinkinz:

การใช้ที่เก็บและรูปแบบของหน่วยงานกับ Entity Framework 4.0:

http://blogs.msdn.com/b/adonet/archive/2009/06/16/using-repository-and-unit-of-work-patterns-with-entity-framework-4-0.aspx


1

Julia Lerman มีวิดีโอแนะนำที่ดีซึ่งมีประมาณ 10 นาทีต่อวิดีโอ พวกมันเป็นการเกริ่นนำ แต่มีเคล็ดลับมากมายที่จะช่วยให้การเรียนรู้ของคุณเป็นไปได้ ฉันชอบการสาธิตของเธอในการดู SQL จริงโดยใช้ SQL Server Profiler


1

หากคุณจะใช้การเชื่อมต่อไม่ต่อเนื่องฉันขอแนะนำให้คุณอ่านหนังสือ Julie Lerman: "Programming DbContext" ในบทพิเศษ 4

ฉันพบตัวอย่างจำนวนมากในบล็อกและอื่น ๆ แต่เกือบทั้งหมดเป็นเรื่องเกี่ยวกับการเชื่อมต่อ

ฉันก็เริ่มเหมือนกัน และหนังสือเหล่านี้ช่วยฉันได้มาก โดยวิธีการที่ฉันซื้อหนังสือสามเล่มของเธอ


0

ฉันกำลังมองหาคำตอบเดียวกันและพบกับhttp://www.dotnetcurry.com/ShowArticle.aspx?ID=599

ในตอนท้ายของการเชื่อมโยงมีการเชื่อมโยงน้อยซึ่งจะทำให้คุณกลิ้งกับ Entity Framework 4

หวังว่านี่จะช่วยได้


0

ว้าวคำตอบมากมาย ตัวอย่างที่มีเท็มเพลต T4 รุ่นที่ปรับแต่งที่สร้าง POCO + อินเตอร์เฟส + ที่เก็บทั้งหมดหรือไม่

https://entityinterfacegenerator.codeplex.com


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

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