2010-03-14 71 views
7

Tôi đang bắt đầu một dự án mới dựa trên máy chủ ASP.NET và Windows.ADO.NET Entity Framework hoặc ADO.NET

Ứng dụng được lên kế hoạch khá lớn và phục vụ số lượng lớn khách hàng kéo và cập nhật freq cao. thay đổi dữ liệu.

Tôi đã tạo các dự án trước đây với Linq-To-Sql hoặc với Ado.Net.

Kế hoạch của tôi cho dự án này là sử dụng VS2010 và khung EF4 mới.

  • Nó sẽ là tuyệt vời để nghe tùy chọn lập trình viên khác về phát triển với Entity Framework

  • Ưu điểm và nhược điểm từ kinh nghiệm trước đây?

  • Bạn có nghĩ EF4 đã sẵn sàng để sản xuất không?

  • Tôi có nên chấp nhận rủi ro hoặc chỉ gắn bó với ADO.NET cũ cũ không?
+0

Bạn có thể nói thêm về ứng dụng nào không? Nghe có vẻ giống như một ứng dụng giao dịch - tin xấu: HOÀN TOÀN sai công cụ. – TomTom

Trả lời

6

Cho dù EF4 thực sự sẵn sàng cho sản xuất có hơi khó nói vì nó chưa chính thức được phát hành chưa .... nhưng tất cả những kinh nghiệm sơ bộ và báo cáo về nó dường như cho thấy nó khá tốt.

Tuy nhiên: bạn cần phải xem xét những gì EF đang cố gắng giải quyết; đó là cách tiếp cận hai lớp, một lớp ánh xạ tới lược đồ lưu trữ vật lý của bạn trong cơ sở dữ liệu của bạn (và hỗ trợ nhiều phần phụ trợ) và lớp thứ hai là mô hình khái niệm mà bạn lập trình chống lại. Và tất nhiên, có sự cần thiết phải lập bản đồ giữa hai lớp đó. Vì vậy, EF4 là tuyệt vời nếu bạn có một số lượng lớn các bảng, nếu bạn có nhiều phụ trợ để hỗ trợ, nếu bạn cần để có thể ánh xạ một lược đồ vật lý đến một lược đồ khái niệm khác nhau, v.v. Nó rất tuyệt vời cho các ứng dụng cấp doanh nghiệp phức tạp.

NHƯNG đi kèm với chi phí - các lớp bổ sung đó có tác động đến hiệu suất, độ phức tạp, khả năng bảo trì. Nếu bạn cần những tính năng đó, bạn sẽ vui lòng trả giá đó, không có câu hỏi. Nhưng bạn có cần điều đó không ??

Chắc chắn, bạn có thể quay trở lại thẳng ADO.NET - nhưng bạn có thực sự muốn fiddle xung quanh với DataTables, DataRows, và untyped Row["RowName"] xây dựng một lần nữa ?? CÓ THẬT KHÔNG???

Vì vậy, đề nghị của tôi sẽ là:

  • nếu bạn chỉ cần SQL Server như phụ trợ của bạn
  • nếu bạn có một bản đồ khá đơn giản và dễ hiểu của bảng một cơ sở dữ liệu đối tượng một thực thể trong mô hình của bạn

sau đó: sử dụng Linq-to-SQL! Tại sao không?? Nó vẫn hoàn toàn được hỗ trợ bởi Microsoft trong .NET 4 - heck, họ thậm chí đã làm bugfixes and added a few bits and pieces - nó nhanh, nó hiệu quả, nó nạc và có nghĩa là - vậy tại sao không ??

+0

Cảm ơn bạn đã phản hồi !. như bạn đã nói ado.net chỉ là một nỗi đau trong ass, và tôi thực sự thích linq-to-sql nhưng nó cảm thấy như chọn một cái gì đó mà là chết chậm. không phải là EF trong tương lai? – RuSh

+1

EF là tương lai - nếu bạn cần tất cả các tính năng đó, vâng. Linq-to-SQL có sẵn, nó hợp lệ, nó hoạt động, nó nhanh - tại sao không sử dụng nó ?? –

+1

Bạn vẫn còn đứng trên vị trí của bạn với đi với LINQ to SQL cho một dự án mới, nơi tất cả tôi cần là để lộ các bảng trong một bản đồ 1-1, và có thể với WCF Data Services? Cảm ơn! – Nock

0

EF 4 giờ đây giống với LINQ to SQL hơn, theo những cách tốt; nó có các phím FK ngay trong đối tượng, đã thêm các phương thức ngay trong bộ đối tượng và rất nhiều tính năng đẹp khác. Các nhà thiết kế được cải thiện nhiều, và cộng với chính là nó hoạt động với SQL và Oracle, và có thể một số người khác (miễn là nhà cung cấp hỗ trợ nó) thay vì LINQ to SQL chỉ với SQL Server.

EF là tương lai; Các dịch vụ dữ liệu ADO.NET là một dịch vụ web bổ sung, cộng với nó hỗ trợ thế hệ POCO và T4, và bất kỳ tính năng mới nào sẽ hỗ trợ điều này (LINQ to SQL chỉ bảo trì, và các bộ dữ liệu sẽ không nhận được bất kỳ thay đổi nào nữa).

HTH.

2

Lời khuyên của tôi là sử dụng cả hai. Lúc đầu, tôi nghĩ rằng tôi sẽ chỉ sử dụng LINQ để sql và không bao giờ phải liên lạc ado.net bao giờ trở lại (những gì làm cho tôi hạnh phúc lol).

Bây giờ tôi đang sử dụng cả hai vì một số thứ từ LINQ đến sql (và bất kỳ ORM nào như EF) không thể thực hiện được. Tôi đã phải làm một số chèn khối lượng và tôi đã làm nó đầu tiên với linq để sql và để làm 500 hồ sơ phải mất hơn 6 phút (2 phút cho phần còn lại quy tắc xác nhận đã được chèn vào db).

tôi đã thay đổi nó để sql bản sao số lượng lớn và bây giờ nó là xuống 2min và 4 giây (4 giây để làm tất cả những lần chèn)

Nhưng giống như marc_s nói rằng tôi thực sự không muốn fiddle xung quanh với DataTables, DataRows, và không được xếp hàng Row ["RowName"].

Giả sử bảng của tôi dài 10 cột và được gọi là Bảng A. Điều tôi đã làm là sử dụng LINQ to sql và tạo một bảng A (đối tượng TableA mới) và điền dữ liệu vào. Sau đó tôi sẽ chuyển đối tượng này đến một phương thức tạo datarow.

Vì vậy, LINQ to sql đã lưu cho tôi một thời gian vì tôi có thể đã tạo một lớp vì tôi không muốn chuyển 10 tham số vào phương thức tạo hàng dữ liệu. Tôi cũng cảm thấy nó mang lại một chút về sự dễ thương khi bạn phải truyền vào đúng đối tượng để sử dụng phương pháp đó để ít cơ hội truyền dữ liệu sai hơn.

Cuối cùng, bạn vẫn có thể sử dụng LINQ to sql để gọi thủ tục được lưu trữ và giống như một dòng mã.

Vì vậy, tôi sẽ sử dụng cả hai khi bạn nhận thấy rằng LINQ to sql (hoặc trong trường hợp của bạn EF) là chậm sau đó chỉ cần viết một SP và gọi nó thông qua EF. Nếu bạn cần làm trực tiếp ado.net để đánh giá những gì bạn cần làm, bạn có thể sử dụng EF cho hầu hết mã (vì vậy bạn ít nhất có thể làm việc với các đối tượng) và chỉ cho phần nhỏ đó là ado.net sql sao chép số lượng lớn.

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