คำถามติดแท็ก entity-framework

ORM ที่สร้างขึ้นโดย Microsoft และพร้อมใช้งานเป็นส่วนหนึ่งของ. Net Framework 3.5 และใหม่กว่า

9
ทำไมฉันไม่ควรใช้รูปแบบพื้นที่เก็บข้อมูลกับ Entity Framework?
ในระหว่างการสัมภาษณ์งานฉันถูกขอให้อธิบายว่าทำไมรูปแบบที่เก็บไม่ใช่รูปแบบที่ดีในการทำงานกับ ORMs เช่น Entity Framework เหตุใดจึงเป็นเช่นนี้

3
Entity Framework เหมาะสมกับเว็บไซต์ที่มีการเข้าชมสูงหรือไม่
Entity Framework 4 เป็นทางออกที่ดีสำหรับเว็บไซต์สาธารณะที่มีความน่าจะเป็น 1,000 ครั้ง / วินาทีหรือไม่ ในความเข้าใจของฉัน EF เป็นโซลูชั่นที่ทำงานได้สำหรับเว็บไซต์ขนาดเล็กหรืออินทราเน็ต แต่จะไม่ขยายได้ง่ายสำหรับเว็บไซต์ชุมชนยอดนิยม (ฉันรู้ว่า SO ใช้ LINQ กับ SQL แต่ .. ฉันต้องการตัวอย่าง / หลักฐานเพิ่มเติม .. ) ตอนนี้ฉันกำลังยืนอยู่ที่สี่แยกของทั้งการเลือกวิธีการ ADO.NET ที่บริสุทธิ์หรือ EF4 คุณคิดว่าประสิทธิภาพของนักพัฒนาซอฟต์แวร์ที่พัฒนาขึ้นกับ EF นั้นคุ้มค่ากับประสิทธิภาพที่สูญเสียไปหรือการเข้าถึง ADO.NET แบบละเอียด (ด้วยขั้นตอนการจัดเก็บ) หรือไม่? มีปัญหาร้ายแรงใด ๆ ที่เว็บไซต์ที่มีปริมาณการใช้งานสูงอาจประสบกับปัญหานี้หรือไม่โดยใช้ EF? ขอบคุณล่วงหน้า.

9
ที่เก็บควรส่งคืน IQueryable หรือไม่
IQueryableฉันได้รับการเห็นมากของโครงการที่มีพื้นที่เก็บข้อมูลที่ส่งกลับกรณีของ สิ่งนี้อนุญาตให้ตัวกรองเพิ่มเติมและการเรียงลำดับสามารถทำได้บนIQueryableโดยรหัสอื่นซึ่งแปลเป็น SQL ที่แตกต่างกันที่ถูกสร้างขึ้น ฉันอยากรู้ว่าแบบนี้มาจากไหนและเป็นความคิดที่ดีหรือไม่ ความกังวลที่ใหญ่ที่สุดของฉันคือการที่IQueryableสัญญาว่าจะตีฐานข้อมูลในภายหลังเมื่อมีการแจกแจง นี่หมายความว่าจะเกิดข้อผิดพลาดนอกที่เก็บ นี่อาจหมายถึงข้อยกเว้น Entity Framework เกิดขึ้นในเลเยอร์อื่นของแอปพลิเคชัน ฉันยังพบปัญหากับชุดผลลัพธ์ที่ใช้งานหลายรายการ (MARS) ในอดีต (โดยเฉพาะเมื่อใช้ธุรกรรม) และวิธีการนี้ดูเหมือนว่าจะทำให้เกิดเหตุการณ์นี้บ่อยขึ้น ฉันได้เรียกAsEnumerableหรือToArrayตอนท้ายของแต่ละนิพจน์ LINQ ของฉันเสมอเพื่อให้แน่ใจว่ามีการเข้าใช้ฐานข้อมูลก่อนที่จะออกจากที่เก็บรหัส ฉันสงสัยว่าการส่งคืนIQueryableอาจมีประโยชน์ในแบบ Building Block สำหรับชั้นข้อมูลหรือไม่ IQueryableฉันได้เห็นรหัสฟุ่มเฟือยสวยบางคนที่มีพื้นที่เก็บข้อมูลการเรียกเก็บข้อมูลอื่นที่จะสร้างที่ยิ่งใหญ่

4
Entity Framework พร้อมระบบขนาดใหญ่ - จะแบ่งรุ่นอย่างไร
ฉันทำงานกับฐานข้อมูล SQL Server ที่มีมากกว่า 1,000 ตารางและอีกไม่กี่ร้อยครั้งและขั้นตอนที่เก็บไว้หลายพันรายการ เรากำลังมองหาที่จะเริ่มใช้ Entity Framework สำหรับโครงการใหม่ของเราและเรากำลังทำงานกับกลยุทธ์ของเราในการทำเช่นนั้น สิ่งที่ฉันวางสายคือวิธีที่ดีที่สุดในการแบ่งตารางออกเป็นรุ่นที่แตกต่างกัน (EDMX หรือ DbContext ถ้าเราใช้รหัสก่อน) ฉันสามารถนึกถึงกลยุทธ์บางอย่างได้ทันทีจากค้างคาว: แยกตามสคีมา เรามีตารางของเราแบ่งออกเป็นสกีมาโหล เราสามารถทำหนึ่งแบบต่อสคีมา แม้ว่ามันจะไม่สมบูรณ์แบบก็ตามเนื่องจาก dbo ยังคงมีขนาดใหญ่มากพร้อมกับ 500+ ตาราง / มุมมอง ปัญหาอีกประการหนึ่งคือหน่วยงานบางอย่างจะจบลงด้วยการทำธุรกรรมที่ครอบคลุมหลายรุ่นซึ่งเพิ่มความซับซ้อนแม้ว่าฉันจะถือว่า EF ทำให้ตรงไปตรงมา แยกตามเจตนา แทนที่จะกังวลเกี่ยวกับสกีมาแบ่งโมเดลตามเจตนา ดังนั้นเราจะมีรูปแบบที่แตกต่างกันสำหรับแต่ละแอปพลิเคชันหรือโครงการหรือโมดูลหรือหน้าจอขึ้นอยู่กับวิธีที่เราต้องการได้รับเม็ด ปัญหาที่ฉันเห็นด้วยคือมีบางตารางที่จำเป็นต้องใช้ในทุกกรณีเช่น User หรือ AuditHistory อย่างหลีกเลี่ยงไม่ได้ เราเพิ่มสิ่งเหล่านั้นในทุกรุ่น (ละเมิด DRY ที่ฉันคิด) หรือเป็นรูปแบบแยกต่างหากที่ใช้โดยทุกโครงการหรือไม่ อย่าแยกเลย - โมเดลยักษ์ตัว นี้เห็นได้ชัดว่าง่ายจากมุมมองการพัฒนา แต่จากการวิจัยของฉันและสัญชาตญาณของฉันดูเหมือนว่ามันจะทำงานได้อย่างยอดเยี่ยมทั้งในเวลาออกแบบระยะเวลาการคอมไพล์และเวลาทำงาน วิธีที่ดีที่สุดในการใช้ EF กับฐานข้อมูลขนาดใหญ่เช่นนี้คืออะไร? …

14
SQL มีความสำคัญหรือไม่ถ้าฉันรู้ว่ากรอบ ORM นั้นดี? [ปิด]
ฉันไม่มีประสบการณ์ร้ายแรงใน SQL และฉันก็เกลียดที่จะเขียน SQL แทน LINQ ฉันมีความสุขมากกับ ORM จากนายจ้างและมุมมองของภาคมันเป็นสิ่งสำคัญที่จะรู้ SQL? ฉันต้องเป็นผู้เชี่ยวชาญในเรื่องนี้หรือไม่? บริษัท ที่ต้องการ SQL บริสุทธิ์มากกว่ากรอบ ORM เป็น "ไดโนเสาร์" ในโลกแห่งการเขียนโปรแกรมหรือไม่?

5
ฉันควรตรวจสอบว่ามีบางสิ่งบางอย่างใน db และล้มเหลวอย่างรวดเร็วหรือรอข้อยกเว้น db
มีสองคลาส: public class Parent { public int Id { get; set; } public int ChildId { get; set; } } public class Child { ... } เมื่อกำหนดChildIdให้Parentฉันควรตรวจสอบก่อนว่ามันมีอยู่ในฐานข้อมูลหรือรอให้ฐานข้อมูลเกิดข้อยกเว้นหรือไม่ ตัวอย่างเช่น (ใช้ Entity Framework Core): หมายเหตุการตรวจสอบประเภทนี้มีอยู่ทั่วอินเทอร์เน็ตแม้ในเอกสารอย่างเป็นทางการของ Microsoft: https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using- mvc / handling-concurrency-with-the-entity-framework-in-an-asp-net-mvc-application # modified-the-department-controllerแต่มีการจัดการข้อยกเว้นเพิ่มเติมสำหรับSaveChanges นอกจากนี้โปรดทราบว่าจุดประสงค์หลักของการตรวจสอบนี้คือการส่งคืนข้อความที่เป็นมิตรและสถานะ HTTP ที่เป็นที่รู้จักแก่ผู้ใช้ API และไม่ละเว้นข้อยกเว้นฐานข้อมูลอย่างสมบูรณ์ และยกเว้นสถานที่เดียวที่จะถูกโยนอยู่ภายในSaveChangesหรือSaveChangesAsyncโทร ... ดังนั้นจะไม่มีข้อยกเว้นใด ๆ เมื่อคุณโทรหรือFindAsync …

5
เราควรใช้ Entity Framework หรือไม่
ขณะนี้เรามีสแต็กต่อไปนี้: VS 2005 เว็บฟอร์ม SQL Server 2005 IIS 6 เรากำลังวางแผนที่จะเปลี่ยนเป็น: VS 2010 MVC และเว็บฟอร์ม SQL Server 2008 IIS 7 คำถามของฉันคือเมื่อเราย้ายไปที่ MVC ด้วย VS 2010 เราควรใช้ Entity Framework (หรือ ORM อื่น) micro ORM (เช่นMassive ) หรือ SQL ธรรมดาหรือไม่ บทเรียนทั้งหมดที่ฉันได้อ่านเกี่ยวกับ VS 2010 นั้นมุ่งไปที่การใช้ Entity Framework สำหรับการทำธุรกรรมข้อมูล แต่นั่นจะเป็นไปในอนาคตอันใกล้ (5+ ปี) หรือไม่? หากเป็นเรื่องสำคัญแอปพลิเคชันของลูกค้าของเราสามารถมีผู้ใช้งานตั้งแต่ 10 …

6
อะไรคือข้อโต้แย้งกับการใช้ EntityFramework? [ปิด]
แอปพลิเคชันที่ฉันกำลังสร้างกำลังใช้โพรซีเดอร์ Stored และโมเดลคลาสที่สร้างขึ้นด้วยมือเพื่อแสดงวัตถุฐานข้อมูล บางคนแนะนำให้ใช้ Entity Framework และฉันกำลังพิจารณาเปลี่ยนไปใช้เนื่องจากฉันไม่ได้อยู่ในโครงการ ปัญหาของฉันคือฉันรู้สึกว่าคนที่โต้เถียงกับ EF กำลังบอกฉันถึงสิ่งที่ดีไม่ใช่สิ่งไม่ดี :) ความกังวลหลักของฉันคือ: เราต้องการการตรวจสอบฝั่งไคลเอ็นต์โดยใช้ DataAnnotations และดูเหมือนว่าฉันจะต้องสร้างแบบจำลองฝั่งไคลเอ็นต์ต่อไปดังนั้นฉันไม่แน่ใจว่า EF จะประหยัดเวลาการเข้ารหัสมาก เราต้องการให้ชั้นเรียนมีขนาดเล็กที่สุดเท่าที่จะเป็นไปได้เมื่อผ่านเครือข่ายและฉันได้อ่านว่าการใช้ EF มักจะมีข้อมูลเพิ่มเติมที่ไม่จำเป็น เรามีเลเยอร์ฐานข้อมูลที่ซับซ้อนซึ่งข้ามหลายฐานข้อมูลและฉันไม่แน่ใจว่า EF สามารถจัดการสิ่งนี้ได้ เรามีฐานข้อมูลทั่วไปหนึ่งฐานที่มีสิ่งต่าง ๆ เช่นผู้ใช้ StatusCodes ประเภท ฯลฯ และหลายอินสแตนซ์ของฐานข้อมูลหลักของเราสำหรับอินสแตนซ์ต่าง ๆ ของแอปพลิเคชัน SELECT SELECT สามารถและจะสืบค้นข้ามทุกอินสแตนซ์ของฐานข้อมูลอย่างไรก็ตามผู้ใช้สามารถแก้ไขวัตถุที่อยู่ในฐานข้อมูลที่ทำงานอยู่ในปัจจุบันเท่านั้น พวกเขาสามารถสลับฐานข้อมูลโดยไม่ต้องโหลดแอปพลิเคชันซ้ำ โหมดวัตถุมีความซับซ้อนมากและมักจะมีการเข้าร่วมค่อนข้างน้อย ข้อโต้แย้งสำหรับ EF คือ: เห็นพ้องด้วย ฉันไม่ต้องใช้รหัสในการตรวจสอบเพื่อดูว่าบันทึกได้รับการปรับปรุงก่อนการบันทึกแต่ละครั้งหรือไม่ การสร้างรหัส EF สามารถสร้างโมเดลคลาสบางส่วนและ POCO ให้ฉันได้ แต่ฉันไม่แน่ใจว่าจะช่วยฉันได้มากเพราะฉันคิดว่าเรายังคงต้องสร้างโมเดลฝั่งไคลเอ็นต์สำหรับการตรวจสอบความถูกต้องและวิธีการแยกวิเคราะห์แบบกำหนดเอง ความเร็วในการพัฒนาเนื่องจากเราไม่จำเป็นต้องสร้างขั้นตอนการจัดเก็บ CRUD …

3
Entity Framework Code เป็นอันดับแรกที่ไร้ความหมาย / ไร้ประโยชน์ในการผลิตและกลยุทธ์ EF ที่ดีสำหรับการผลิตคืออะไร?
ฉันเพิ่งเขียนโปรแกรมด้วย Entity Framework 4.1 Code แรกและฉันชอบการพัฒนา แต่มีเพียงแผนสุดท้ายและรายการคุณลักษณะที่เปลี่ยนแปลงอย่างรวดเร็วฉันกำลังปรับเปลี่ยน Class / Database อย่างต่อเนื่องเพื่อตอบสนองความต้องการของแอปพลิเคชัน ในการพัฒนาไม่มีข้อมูลอยู่และฉันสามารถลบฐานข้อมูลทั้งหมดได้อย่างง่ายดายดังนั้นมันจึงถูกสร้างขึ้นใหม่ด้วยสคีมาใหม่ แต่เห็นได้ชัดเมื่อมีชีวิต - นี่แย่มาก! วิธีแก้ปัญหาเดียวที่ฉันเห็นคือการวางตารางเมทาดาทาและทำให้ฐานข้อมูลซิงค์ด้วยตนเองหรือโดยทั่วไปแล้วปล่อยและทำใหม่ ฉันชอบวิธีแรกเป็นการส่วนตัวเพราะฉันคิดว่าการเพิ่มคอลัมน์ / ตารางจะง่ายกว่าการสร้างและย้ายข้อมูล แต่ถ้าฉันไม่ได้พลาดสิ่งนี้จะย้ายออกไปจาก Code First อย่างสมบูรณ์ ดังนั้นคำถามคือ Code First เป็นเพียงการพัฒนาครั้งแรกและกลยุทธ์ที่ดีในการจัดการ EF สำหรับสภาพแวดล้อมการผลิตคืออะไร

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

6
มีประโยชน์จริง ๆ กับ Repository หรือไม่?
กำลังอ่านบทความบางอย่างเกี่ยวกับข้อดีของการสร้างแหล่งเก็บข้อมูลทั่วไปสำหรับแอปใหม่ ( ตัวอย่าง ) แนวคิดนี้ดูดีเพราะให้ฉันใช้พื้นที่เก็บข้อมูลเดียวกันเพื่อทำสิ่งต่าง ๆ สำหรับเอนทิตีที่แตกต่างกันหลายรายการพร้อมกัน: IRepository repo = new EfRepository(); // Would normally pass through IOC into constructor var c1 = new Country() { Name = "United States", CountryCode = "US" }; var c2 = new Country() { Name = "Canada", CountryCode = "CA" }; var c3 = …

3
เหตุใดฉันจึงควรใช้รายการ <T> บน IEnumerable <T>
ในแอปพลิเคชันเว็บ ASP.net MVC4 ของฉันฉันใช้ IEnumerables พยายามติดตามมนต์เพื่อเขียนโปรแกรมไปยังส่วนต่อประสานไม่ใช่เพื่อการนำไปใช้ Return IEnumerable(Of Student) VS Return New List(Of Student) มีคนบอกให้ฉันใช้ List และไม่ใช่ IEnumerable เพราะรายการบังคับให้แบบสอบถามดำเนินการและ IEumerable ไม่ นี่เป็นวิธีปฏิบัติที่ดีที่สุดจริง ๆ หรือ มีทางเลือกอื่นอีกไหม? ฉันรู้สึกแปลก ๆ ที่ใช้วัตถุที่เป็นรูปธรรมซึ่งสามารถใช้ส่วนต่อประสาน ความรู้สึกแปลก ๆ ของฉันเป็นธรรมหรือไม่?

2
แอปพลิเคชัน ASP.NET MVC ควรใช้ Entity Framework โดยตรงเป็นโมเดลหรือไม่
ฉันกำลังสร้างแอปพลิเคชัน MVC แรกของฉันใน Visual Studio 2013 (MVC 5) และฉันยังไม่ชัดเจนเกี่ยวกับวิธีที่ดีที่สุดในการตั้งค่าแบบจำลองของฉัน ฉันสร้างโมเดลเอนทิตี้ของเฟรมเวิร์กโดยใช้รหัส - แรกจากฐานข้อมูลที่มีอยู่ สัญชาตญาณแรกของฉันคือการสร้างคลาสตัวกลางที่จะเป็นโมเดลที่ใช้โดยมุมมองและให้คลาสเหล่านั้นทำงานกับคลาสเฟรมเวิร์กเอนทิตี ในขณะที่ฉันกำลังเขียนคลาสคนกลางฉันรู้ว่าฉันเพิ่งจะติดตั้งสิ่งต่าง ๆ มากมายที่ชั้นเรียนของ EF ได้ทำกับ setter ส่วนตัวเป็นครั้งคราวหรือส่งจากประเภทข้อมูลหนึ่งไปยังอีกประเภทหนึ่ง ดังนั้นดูเหมือนว่าจะเสียเปล่า กฎทั่วไปใช้คลาสเอนทิตี้ของเฟรมเวิร์กเป็นโมเดลสำหรับแอปพลิเคชัน MVC โดยตรงหรือไม่ หรือมีประโยชน์บางอย่างที่ฉันขาดไปในการสร้างคลาสตัวกลางเหล่านี้หรือไม่?

4
จำเป็นต้องใช้คอลัมน์ ID ที่ไม่ซ้ำกันในตารางหลายต่อหลาย (ทางแยก) หรือไม่
การเริ่มโครงการเล็ก ๆ กับ EF แต่ฉันมีคำถามบางอย่างเกี่ยวกับการเข้าร่วมตารางและกุญแจเป็นต้นให้บอกว่าฉันมีตารางแอปพลิเคชันและตารางสิทธิ์ แอปพลิเคชันมีสิทธิ์มากมายและสิทธิ์แต่ละรายการสามารถเป็นของแอปพลิเคชันจำนวนมาก (หลายต่อหลายคน) ตอนนี้ตารางใบสมัครและสิทธิ์เป็นเรื่องง่าย: Applications -------------- PK ApplicationID Name Permissions -------------- PK PermissionID Name แต่วิธีที่ดีที่สุดที่จะทำตารางเข้าร่วมคืออะไร? ฉันมีสองตัวเลือกเหล่านี้: ApplicationPermissions ----------------------- PK ApplicationPermissionID CU ApplicationID CU PermissionID หรือ ApplicationPermissions ----------------------- CPK ApplicationID CPK PermissionID PK = Primary Key CPK = Composite Primary Key CU = Composite Unique Index คุณเคยถูกเผาไปทางอื่นหรือไม่? …

3
ฉันจะใช้รูปแบบพื้นที่เก็บข้อมูลสำหรับโมเดลวัตถุที่ซับซ้อนได้อย่างไร
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 7 ปีที่ผ่านมา แบบจำลองข้อมูลของเรามีเกือบ 200 คลาสที่สามารถแบ่งออกเป็นประมาณหนึ่งโหลหน้าที่การทำงาน คงจะเป็นการดีที่จะใช้โดเมน แต่การแยกนั้นไม่สะอาดและเราไม่สามารถเปลี่ยนได้ เรากำลังออกแบบ DAL ของเราใหม่เพื่อใช้ Entity Framework และคำแนะนำส่วนใหญ่ที่ฉันเคยเห็นแนะนำให้ใช้รูปแบบ Repository อย่างไรก็ตามไม่มีตัวอย่างใดที่จัดการกับตัวแบบวัตถุที่ซับซ้อนได้ การใช้งานบางอย่างที่ฉันพบแนะนำให้ใช้ repository ต่อเอนทิตี ดูเหมือนว่าไร้สาระและไม่สามารถบำรุงรักษาได้สำหรับรุ่นที่มีขนาดใหญ่และซับซ้อน จำเป็นหรือไม่ที่จะสร้าง UnitOfWork สำหรับแต่ละการดำเนินการและที่เก็บสำหรับแต่ละเอนทิตี ฉันสามารถจบลงด้วยชั้นเรียนหลายพันชั้น ฉันรู้ว่าสิ่งนี้ไม่สมเหตุสมผล แต่ฉันได้พบแนวทางเล็กน้อยในการใช้ Repository, Unit of Work และ Entity Framework ผ่านโมเดลที่ซับซ้อนและแอปพลิเคชันทางธุรกิจที่สมจริง

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