2010-03-19 42 views
180

Tôi đã lập trình được một thời gian và đã sử dụng LINQ-To-SQL và LINQ-To-Entities trước (mặc dù khi sử dụng các thực thể nó có mối quan hệ Entity/Table 1-1 - nghĩa là không khác nhiều so với L2SQL)Entity Framework 4/POCO - Bắt đầu từ đâu?

Tôi đã thực hiện rất nhiều đọc về Inversion of Control, Unit of Work, POCO và các mẫu kho lưu trữ và muốn sử dụng phương pháp này trong các ứng dụng mới của tôi.

Tôi đang gặp khó khăn trong việc tìm kiếm hướng dẫn cho người mới bắt đầu rõ ràng, ngắn gọn về EF4 mà không hiểu biết về EF1.

Các câu hỏi cụ thể mà tôi cần trả lời là:

Mã đầu tiên/mô hình đầu tiên? Ưu điểm/nhược điểm liên quan đến EF4 (tức là điều gì sẽ xảy ra nếu tôi thực hiện mã đầu tiên, thay đổi mã vào một ngày sau đó và cần phải tạo lại mô hình DB của tôi - Dữ liệu có được bảo quản và chuyển đổi hoặc bị loại bỏ không?)

Giả sử tôi ' m đi mã đầu tiên (tôi muốn xem cách EF4 chuyển đổi nó thành lược đồ DB) làm thế nào để tôi thực sự bắt đầu? Khá thường xuyên tôi đã nhìn thấy bài viết với sơ đồ thực thể nói "Vì vậy, đây là mô hình thực thể của tôi, bây giờ tôi sẽ ..." - Thật không may, tôi không rõ ràng nếu họ tạo ra các mô hình trong nhà thiết kế, lưu nó vào tạo mã sau đó dừng lại bất kỳ thế hệ mã tự động nào khác - hay - Chúng đã được mã hóa (POCO)? các lớp học và bằng cách nào đó đã nhập chúng vào khung nhìn deisgner?

Tôi cho rằng điều tôi thực sự cần là hiểu được "ma thuật" xuất phát từ đâu và cách tự thêm nó nếu tôi không chỉ tạo ra một mô hình EF trực tiếp từ DB.

Tôi biết câu hỏi có chút mơ hồ nhưng tôi không biết những gì tôi không biết - Vì vậy, bất kỳ đầu vào/chỉnh sửa/làm rõ nào được đánh giá cao.

Không cần phải nói, tôi không mong đợi bất cứ ai ngồi đây và dạy tôi EF - Tôi chỉ thích một số hướng dẫn/diễn đàn/blog/v.v. cho người mới hoàn thành thực thể

+3

được thực sự REALLY cẩn thận với tuổi thọ của kết nối của bạn: http://bit.ly/fi83NV Đó là một cái gì đó bạn thực sự cần phải nhận thức khi trừu tượng bối cảnh vào kho. Nó có thể xuất hiện để làm việc nhưng thực sự từ từ clocking ngày càng nhiều kết nối mở – BritishDeveloper

+0

@BRitishDeveloper - Lời khuyên rất tốt. Chúng tôi đã sử dụng một container IoC để lấy các kho lưu trữ và có một vấn đề trong đó bối cảnh được gán cho kho sẽ đóng kết nối sau một khoảng thời gian nhưng sẽ không bị gắn cờ như được xử lý/giống. Cuối cùng chúng ta mở rộng bối cảnh với một IsDisposed() đã kiểm tra với trạng thái xử lý thông thường và trạng thái kết nối cho phép chúng ta xây dựng một bối cảnh khác nếu được yêu cầu. – Basic

+0

Một mẹo hữu ích nữa là khi nhận được ngữ cảnh mới, các đối tượng liên quan đến ngữ cảnh cũ sẽ không có theo dõi thay đổi phù hợp và sẽ gây ra các vấn đề về ngữ cảnh sai - Vì vậy nếu bạn có ứng dụng dài và thay đổi ngữ cảnh ở giữa -xuất hiện, bạn cần phải lấy lại tất cả các thực thể của bạn. Để làm cho nó thú vị hơn, chúng tôi đã thực sự phải có 2 chạy side-by-side ở lần và kết thúc bằng văn bản một số mã để bản đồ giữa 2 độc đáo ... – Basic

Trả lời

55

Những bài viết này có thể quan tâm ... series thực sự được vào những ưu điểm và nhược điểm của cách tiếp cận 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

Trong những bài viết này tác giả đề cập đến các bài báo trong tương lai mà mô tả thực hành tốt nhất trong việc thực hiện Repository và Đơn vị mẫu làm việc, nhưng tôi không thể tìm thấy chúng. Những bài viết này được viết tốt và tôi muốn đọc thêm từ tác giả này.

+2

Là một người đã thoải mái với Entity Framework bằng cách sử dụng nhà thiết kế, đây là một phần giới thiệu tuyệt vời cho POCO. – nathanchere

+1

Nếu bạn đang tìm kiếm Đơn vị công việc, hãy theo dõi tại http://blogs.msdn.com/b/adonet/archive/2009/06/16/using-repository-and-unit-of-work-patterns- với-entity-framework-4-0.aspx – Mike

2

Đây là một walkthrough trên Mẫu POCO cho Khung thực thể trông khá tốt. Bạn cũng có thể muốn xem ADO.NET team blog. Nếu bạn muốn bắt đầu ngay từ đầu (EF v1.0) làm cơ sở cho kiến ​​thức về EF của bạn, tôi thấy cuốn sách Programming Entity Framework của Julia Lerman rất đầy đủ.

+0

Cảm ơn - Tôi chưa xem sách nhưng tôi đã đọc cả hai liên kết được cung cấp. Bản mẫu hướng dẫn rất hữu ích trong việc giải thích cách bổ sung chức năng bổ sung cho các đối tượng POCO khi chúng được định nghĩa (ví dụ tải Lazy) nhưng (và tôi có thể thiếu một cái gì đó rõ ràng ở đây) nó không thực sự giải thích cách bắt đầu (ví dụ: việc tạo một lớp như được chỉ định không biến nó thành một thực thể hoặc không liên kết nó với một mô hình) Tôi đã có một trải nghiệm tương tự với blog. Tôi sẽ xem xét việc nhận được cuốn sách mặc dù - Có vẻ đầy hứa hẹn - Cảm ơn bạn. – Basic

+2

Về cuốn sách của Julia Lerman, điều đáng nói là cô đang làm việc trên một ấn bản thứ hai bao gồm EF4: http://learnentityframework.com/LearnEntityFramework/book/here-i-go-again-programming-entity-framework-2nd -edition-for-ef4 /. Tôi nhớ rằng tôi đã đọc ở đâu đó rằng ngày xuất bản theo kế hoạch là vào tháng Năm năm nay nhưng tôi không thể tìm thấy nguồn nữa. Ngoài ra tôi chỉ tìm thấy trang web này: http://www.nakedobjects.net/home/index2.shtml – Slauma

+0

Slauma, liên kết mà bạn cung cấp trông thật chính xác những gì tôi cần - ngoại trừ việc sử dụng thư viện "Naked Obects" của bên thứ 3 có vẻ như được obfuscating sự phức tạp bằng cách nào đó - Trong một phút, tôi nghĩ bạn sẽ nứt nó – Basic

3

Bạn có thể lấy cuốn sách của Lerman hoặc một cái gì đó đơn giản hơn như "ánh xạ đối tượng quan hệ Pro linq". Tất cả các khái niệm vẫn giống với POCO, ngoại trừ việc bây giờ bạn nên vô hiệu hóa việc tạo mã và ánh xạ trực tiếp tới mô hình của bạn trong edmx csdl (hoặc tạo trình tạo POCO của riêng bạn). Tất cả các nguyên tắc ánh xạ đều giống nhau. Dù sao trong thời gian chạy bạn đang làm việc với proxy có nguồn gốc từ đối tượng POCO của bạn, do đó bạn nên quan tâm đến việc hỗ trợ chặn (ảo hóa các thuộc tính POCO của bạn).

11

tôi đã đi qua này: http://blogs.msdn.com/adonet/pages/feature-ctp-walkthrough-code-only-for-the-entity-framework.aspx

Mà cho bạn từng bước để mã đầu tiên. Nó yêu cầu CTP 3 cho EF4 (Tải xuống được liên kết từ bài viết đó).

này là khá gần với những gì tôi đã sau (mặc dù lý tưởng một giải pháp mà không dựa vào một CTP sẽ đã thích hợp hơn)

+0

NB: CTP này ban đầu cho VS2010 Beta nhưng cũng hỗ trợ VS2010 RTM. – Basic

7

tôi khuyên bạn nên tham gia một nửa giờ hoặc lâu hơn và tạo ra một mô hình EF1.0 ổn định trong VS hiện tại của bạn. Điều đó sẽ giúp bạn hiểu được những ẩn dụ và khái niệm về EF 4.0. Chỉ cần whip lên một khách hàng đơn giản, sản phẩm và đơn đặt hàng db ... Tôi khuyên bạn nên làm của riêng bạn và không sử dụng Northwind.

3
+0

Cấu trúc dự án của anh ấy trông giống như một dự án dựa trên nHibernate cũ mà tôi đã làm việc. Cept cho tất cả các WCF jazz, mà tôi đang quan tâm về làm mới bản thân mình trên. Liên kết vững chắc. – Merritt

1

Julia Lerman có a nice series of introductory videos, mỗi khoảng 10 phút. Chúng được giới thiệu, nhưng có rất nhiều lời khuyên thực tế mà có được một số rào cản học tập tiềm năng ra khỏi con đường. Tôi đặc biệt thích trình diễn của cô về việc xem SQL thực tế bằng cách sử dụng SQL Server Profiler.

4

Đây là một câu hỏi hay, nhưng khó có thể cập nhật vì Khung thực thể tiếp tục phát triển. Có lẽ nơi tốt nhất để bắt đầu sẽ cập nhật trong tương lai là Microsoft's EF page.

Một số liên kết khác mà tôi thấy hữu ích khi Googling (tập trung vào Bộ luật đầu tiên):

1

Nếu bạn định sử dụng ngắt kết nối ed cenarios, tôi khuyên bạn nên đọc cuốn sách của Julie Lerman: "Lập trình DbContext", trong Chương 4.

Tôi tìm thấy rất nhiều ví dụ trong blog, v.v. nhưng hầu như tất cả đều là về cenarios được kết nối.

Tôi cũng bắt đầu. và những cuốn sách này đã giúp tôi rất nhiều. Nhân tiện, tôi đã mua ba cuốn sách của cô ấy.

0

Wow, rất nhiều câu trả lời. Làm thế nào về một ví dụ có chứa một phiên bản tinh chỉnh của các mẫu T4 mà tạo ra giao diện POCO + + hoàn toàn?

https://entityinterfacegenerator.codeplex.com

+0

Thú vị và tiện lợi để kiểm tra các vị trí/bối cảnh, nhưng tại sao bạn cần phải tự trừu tượng các thực thể? Theo định nghĩa, chúng không nên có bất kỳ mã chức năng nào bên trong chúng. – Basic

+0

Bạn đã chính xác. Chủ yếu, mọi người sẽ không cần phải có giao diện riêng biệt. Nhưng nó giúp những người muốn giải quyết các tham chiếu vòng tròn và muốn chia sẻ các giao diện, chứ không phải các lớp thực tế, với một bên thứ ba. Điều này sẽ giúp ích rất nhiều nếu công ty của bạn cần vượt qua một cuộc kiểm toán với tích hợp bên thứ ba mà không yêu cầu phải thực hiện chi tiết trong việc chia sẻ. – Believe2014

Các vấn đề liên quan