Trước hết, nếu bạn đang bắt đầu một dự án mới, hãy đi với Entity Framework ("EF") - giờ đây nó tạo ra SQL tốt hơn nhiều (giống như Linq to SQL) và dễ duy trì và mạnh hơn Linq to SQL (" L2S "). Khi phát hành .NET 4.0, tôi coi Linq to SQL là một công nghệ lỗi thời. MS đã rất cởi mở về việc không tiếp tục phát triển L2S nữa.
1) Hiệu suất
Đây là khó khăn để trả lời. Đối với hầu hết các hoạt động đơn thực thể ( CRUD ), bạn sẽ tìm thấy hiệu suất tương đương với cả ba công nghệ. Bạn phải biết làm thế nào để EF và Linq to SQL hoạt động để sử dụng chúng hết mức. Đối với các hoạt động có khối lượng lớn như truy vấn bỏ phiếu, bạn có thể muốn EF / L2S "biên dịch" truy vấn thực thể của mình để khung không phải liên tục tạo lại SQL hoặc bạn có thể gặp phải các vấn đề về khả năng mở rộng. (xem các chỉnh sửa)
Đối với các cập nhật hàng loạt trong đó bạn đang cập nhật lượng dữ liệu khổng lồ, SQL thô hoặc thủ tục được lưu trữ sẽ luôn hoạt động tốt hơn giải pháp ORM vì bạn không phải sắp xếp dữ liệu qua dây với ORM để thực hiện cập nhật.
2) Tốc độ phát triển
Trong hầu hết các kịch bản, EF sẽ thổi bay SQL / procs được lưu trữ khi nói đến tốc độ phát triển. Nhà thiết kế EF có thể cập nhật mô hình của bạn từ cơ sở dữ liệu của bạn khi nó thay đổi (theo yêu cầu), do đó bạn không gặp phải vấn đề đồng bộ hóa giữa mã đối tượng và mã cơ sở dữ liệu của bạn. Lần duy nhất tôi không cân nhắc sử dụng ORM là khi bạn đang thực hiện một ứng dụng loại báo cáo / bảng điều khiển nơi bạn không thực hiện bất kỳ cập nhật nào hoặc khi bạn tạo một ứng dụng chỉ để thực hiện các hoạt động bảo trì dữ liệu thô trên cơ sở dữ liệu.
3) Mã gọn gàng / duy trì
Chống tay xuống, EF đánh bại SQL / sprocs. Bởi vì các mối quan hệ của bạn được mô hình hóa, các phép nối trong mã của bạn tương đối không thường xuyên. Các mối quan hệ của các thực thể gần như hiển nhiên đối với người đọc đối với hầu hết các truy vấn. Không có gì tệ hơn là phải đi từ gỡ lỗi tầng này sang tầng khác hoặc thông qua nhiều tầng SQL / tầng trung lưu để hiểu những gì thực sự xảy ra với dữ liệu của bạn. EF đưa mô hình dữ liệu của bạn vào mã của bạn một cách rất mạnh mẽ.
4) Linh hoạt
Các procs được lưu trữ và SQL thô "linh hoạt" hơn. Bạn có thể tận dụng sprocs và SQL để tạo các truy vấn nhanh hơn cho trường hợp cụ thể lẻ và bạn có thể tận dụng chức năng DB gốc dễ dàng hơn so với bạn có thể và ORM.
5) Nhìn chung
Đừng để bị cuốn vào sự phân đôi sai lầm khi chọn ORM so với sử dụng các thủ tục được lưu trữ. Bạn có thể sử dụng cả hai trong cùng một ứng dụng và có lẽ bạn nên làm vậy. Các hoạt động hàng loạt lớn phải được thực hiện trong các thủ tục được lưu trữ hoặc SQL (mà thực tế có thể được gọi bởi EF) và nên sử dụng EF cho các hoạt động CRUD của bạn và hầu hết các nhu cầu của tầng lớp trung lưu. Có lẽ bạn sẽ chọn sử dụng SQL để viết báo cáo của mình. Tôi đoán đạo đức của câu chuyện vẫn giống như mọi khi. Sử dụng các công cụ thích hợp cho công việc. Nhưng sự mỏng manh của nó là, ngày nay EF rất tốt (kể từ .NET 4.0). Dành thời gian thực để đọc và hiểu sâu về nó và bạn có thể tạo một số ứng dụng hiệu suất cao, tuyệt vời một cách dễ dàng.
EDIT : EF 5 đơn giản hóa phần này một chút với Truy vấn LINQ được biên dịch tự động , nhưng đối với nội dung có khối lượng lớn thực sự, bạn chắc chắn sẽ cần kiểm tra và phân tích những gì phù hợp nhất với bạn trong thế giới thực.