Chúng tôi đang bắt đầu một sản phẩm dựa trên web mới, trong đó chúng tôi đang có kế hoạch để lộ logic kinh doanh của chúng tôi thông qua các dịch vụ WCF. Chúng tôi sẽ sử dụng ASP.NET 4.0, C#, EF 4.0. Trong tương lai, chúng tôi muốn xây dựng các ứng dụng iPhone và các ứng dụng WPF dựa trên các dịch vụ. Tôi đã đọc rất nhiều về việc sử dụng POCO vs Self Tracking Entities (STE) và từ hiểu của tôi, các STE không hoạt động tốt với kịch bản web. Có ai có thể làm sáng tỏ thêm về vấn đề này không?Thực thể theo dõi tự so với thực thể POCO
Trả lời
Đối với tôi STE là khái niệm hoàn toàn sai. Nó chỉ là một thực hiện khác của DataSet.
- Trong ứng dụng ASP.NET, bạn sẽ phải lưu trữ STE ở đâu đó trong số các yêu cầu. Trong yêu cầu đầu tiên, bạn sẽ truy vấn nguồn dữ liệu của mình để lấy STE và cung cấp dữ liệu trong trang. Trong yêu cầu tiếp theo (postback), bạn sẽ muốn sửa đổi STE với dữ liệu trả về từ trình duyệt. Để hỗ trợ theo dõi, bạn sẽ phải sử dụng cùng STE như trong yêu cầu đầu tiên = > bạn sẽ phải lưu trữ STE trong viewstate (nếu bạn muốn sử dụng ASP.NET WebForms) hoặc phiên.
- STE vô dụng đối với SOA hoặc khả năng tương tác. Theo dõi logic là một phần của STE = nó đang chạy trên máy khách. Nếu bạn vạch trần STE trong dịch vụ, bạn sẽ thấy ngay rằng phía máy khách sẽ sử dụng các tính năng theo dõi giống như trong logic STE. Nhưng những tính năng này không được cung cấp cho phía bên kia một cách tự động. Trong .NET bạn có chúng bởi vì bạn chia sẻ assembly với STEs. Nhưng trên nền tảng khác, bạn phải giải thích các nhà phát triển cách thực hiện logic STE để làm cho nó hoạt động trên mặt của bạn. Đây có lẽ là trường hợp hạn chế nhất đối với bạn vì ứng dụng iPhone.
Trong ASP.NET, tại sao không chỉ hiển thị STE theo yêu cầu đầu tiên và lúc postback lấy STE từ cơ sở dữ liệu, cập nhật các trường và lưu? –
Nếu bạn hài lòng với truy vấn cơ sở dữ liệu bổ sung, bạn không cần STE chút nào - ngoại trừ việc sửa đổi đồ thị đối tượng phức tạp. Bạn có thể cho ObjectContext (với các proxy POCO) theo dõi các thay đổi cho bạn. –
"STE là vô dụng đối với SOA hoặc khả năng tương tác." Tôi hoàn toàn đồng ý. Thật không may mọi người dường như nhấn mạnh vào xem SOA và WCF như remoting. Chắc chắn, nó có thể được thực hiện, nhưng sau đó bạn đang đặt rất nhiều niềm tin vào khách hàng. –
Thực thể theo dõi tự hoạt động hoàn hảo trong một MVC Web với kịch bản WCF. Tôi đã tham gia vào 2 dự án sử dụng chúng (một trong những sản phẩm, một phần lớn).
Với POCO, bạn sẽ mất bất kỳ thay đổi nào theo dõi dây dẫn gây ra nhiều đau đớn hơn vì EF hiện phải truy vấn lại thông tin tiểu bang. Nếu bạn sử dụng EF và WCF STE, hãy giải quyết rất nhiều vấn đề và làm cho toàn bộ đường dẫn bền vững của bạn trở nên thực sự suôn sẻ.
Bạn có thể cung cấp trích dẫn cho khiếu nại này không? "STE không hoạt động tốt với kịch bản web"
Bạn kiên trì STE của bạn giữa các yêu cầu (ví dụ như GET -> POST) như thế nào? –
@jfar, trong kịch bản WCF, khái niệm "Dịch vụ độc lập nền tảng" bị mất nếu bạn sử dụng STE (a.k.a Thực thể theo dõi tự). Ví dụ, nếu có một ứng dụng khách Java muốn tương tác với dịch vụ WCF. Ứng dụng Java Client sẽ nhận các SET ở phía máy khách như thế nào? Thật không may, nó chỉ đơn giản là không thể! Có nghĩa là, nếu chúng ta đang sử dụng STEs thì dịch vụ WCF của chúng ta chỉ có thể được sử dụng bởi các máy khách được xây dựng trong .Net. Đó là khủng khiếp phải không? – Baig
Nếu dịch vụ này sẽ được tiêu thụ bởi bất kỳ ứng dụng nào bạn không có quyền kiểm soát trực tiếp, bạn nên cân nhắc việc ly dị bất cứ điều gì liên quan đến EF (hoặc nHibernate hoặc Linq2Sql hoặc bất kỳ giải pháp quản lý dữ liệu nào khác) từ các dịch vụ của bạn và các đối tượng chuyển dữ liệu của bạn. Điều này sẽ cách nhiệt những thay đổi nội bộ từ việc phá vỡ các khách hàng. Breaking khách hàng thường là một điều xấu.
Tham khảo http://msdn.microsoft.com/en-us/data/jj613924.aspx, vì STEs không còn được khuyến nghị! Microsoft khuyên bạn nên sử dụng bất kỳ ASP.NET Web API, WCF Data Services hoặc API Entity Framework (ops phức tạp)
- 1. Khung thực thể: Thay đổi theo dõi trong SOA với cách tiếp cận POCO
- 2. POCO trong khung thực thể là gì?
- 3. Tên thực thể Html so với số thực thể?
- 4. Tên thực thể so với tên bảng
- 5. Entity Framework POCO Thay đổi Chiến lược Theo dõi
- 6. T4 Để tạo POCO trên các thực thể LLBLGen Pro?
- 7. Xử lý khung thực thể Khi tạo POCO
- 8. Sử dụng Automapper để cập nhật Thực thể POCO
- 9. Khuôn khổ thực thể, POCO và thuộc tính riêng
- 10. Tùy chỉnh thực thể hóa thực thể
- 11. Theo dõi thực thi Javascript trong Chrome - cách thực hiện?
- 12. theo dõi Bug thực hành tốt nhất
- 13. Khuôn khổ thực thể không theo dõi thay đổi bộ sưu tập khi kết nối lại một thực thể
- 14. Hiệu suất của khung thực thể 4 so với khung thực thể 3.5 như thế nào?
- 15. phương pháp trong thực thể DDD so với dịch vụ
- 16. Theo dõi mức âm thanh micrô theo thời gian thực
- 17. Theo dõi đối tượng: MATLAB so với Python Numpy
- 18. So sánh 10 triệu thực thể
- 19. Khuôn khổ thực thể Mã-Đầu tiên: "ObjectStateManager không thể theo dõi nhiều đối tượng có cùng khóa."
- 20. Khuôn khổ thực thể Tìm so với vị trí
- 21. Phép tính của DbSet.Create so với thực thể mới()
- 22. JPA: Ý tưởng để theo dõi sự tiến hóa/thay đổi của các thực thể
- 23. Cách tốt nhất để so sánh hai thực thể khung thực thể là gì?
- 24. Thực thể khung - Truy vấn LINQ theo thứ tự và nhóm theo
- 25. Thực tiễn tốt nhất - Chú thích dữ liệu so với OnChanging trong khung thực thể 4
- 26. Đối tượng miền - "Đối tượng thông minh" so với POCO
- 27. C#, khung thực thể, tăng tự động
- 28. Dữ liệu Khung thực thể bộ nhớ cache và theo dõi các thay đổi của nó?
- 29. Có cách nào để xóa cơ chế theo dõi thay đổi cho một thực thể không?
- 30. Theo dõi các biến thể mã nguồn
Tôi đánh giá cao câu hỏi này được hỏi một lúc trước, nhưng tôi tò mò về những gì bạn quyết định cuối cùng tình hình POCO vs STE? –