Có lẽ nó có ý nghĩa, để xoay chuyển câu hỏi và tìm ra các giai đoạn mà chỉ các thủ tục được lưu trữ có thể làm, những gì bạn muốn đạt được. Có lẽ có những trường hợp thực sự sử dụng, nơi các thủ tục lưu trữ nổi bật.
Nếu nó tạo ra sự khác biệt, tôi đang sử dụng MSSQL và Entity Framework.
Kiến thức của tôi về EF còn hạn chế, nhưng theo như tôi có thể thấy, thì EF ( chỉ ) là một ORM như mọi thứ khác; và may mắn là có khả năng sử dụng SQL thô .
Nếu tôi lấy hai điểm chính của bạn:
Một báo cáo phức tạp mất vài phút để chạy (đây là một trang trong ứng dụng web). Tôi thấy tôi có thể viết SQL hiệu quả hơn nhiều (chỉ mất vài giây để chạy) so với những gì LINQ đang cung cấp.
LINQ / EF đã giảm, khi làm một báo cáo. Và như bạn nhận thấy, SQL
nhanh hơn nhiều so với sử dụng ORM. Nhưng nói điều này có lợi cho các thủ tục được lưu trữ hay chỉ chống lại việc sử dụng ORM cho mọi thứ?
Vấn đề của bạn rõ ràng có thể giải quyết với SQL . Nếu truy vấn đó được lưu trữ và phiên bản được kiểm soát trong cơ sở mã của bạn - theo ví dụ của bạn - ít nhất là không có sự khác biệt .
Một ứng dụng web cần đọc và ghi vào một vài bảng trên cơ sở dữ liệu riêng biệt chứa nhiều thông tin nhạy cảm khác không liên quan đến ứng dụng. Thay vì cho phép nó truy cập vào mọi thứ, tôi đã sử dụng một thủ tục được lưu trữ chỉ thực hiện những gì cần thiết và chỉ trả về thông tin hạn chế. Sau đó, ứng dụng web chỉ có thể được cấp quyền truy cập vào quy trình được lưu trữ này mà không có quyền truy cập vào bất kỳ bảng nào, v.v.
Điều tương tự ở đây: một chuỗi kết nối đơn giản và CẬP NHẬT và vấn đề của bạn đã được thực hiện. Vấn đề này có thể được giải quyết ngay cả với ORM :
chỉ cần sử dụng dịch vụ web trước DB khác và đạt được sự phân chia / cách ly tương tự .
Vì vậy, không có gì để xem ở đây.
Nhìn vào một số điểm mà những người khác đã thực hiện:
Bạn có các đơn vị công việc phức tạp, có thể liên quan đến nhiều bảng, không thể được bao bọc trong giao dịch một cách dễ dàng bằng các tính năng của EF.
Nhưng SQL
có thể làm điều đó. Không có phép thuật liên quan ở đây.
Cơ sở dữ liệu của bạn không chơi tốt với EF
Một lần nữa: Sử dụng EF khi thích hợp.
Bạn cần làm việc với dữ liệu vượt qua ranh giới máy chủ với các máy chủ được liên kết
Tôi không thấy, làm thế nào các thủ tục lưu trữ giúp đỡ. Vì vậy, tôi không thể thấy một lợi thế của các thủ tục được lưu trữ; nhưng có lẽ ai đó làm sáng tỏ điều đó
Bạn có các kịch bản truy xuất dữ liệu rất phức tạp trong đó cần có SQL "kim loại trần" để đảm bảo hiệu suất đầy đủ
Một lần nữa: "Ranh giới của EF ".
Ứng dụng của bạn không có quyền CRUD đầy đủ trên một bảng nhưng ứng dụng của bạn có thể được phép chạy trong bối cảnh bảo mật mà máy chủ của bạn tin tưởng
Được chứ. Tôi đi với một có thể .
Cho đến nay chỉ có một nửa điểm được thực hiện có lợi cho các thủ tục được lưu trữ.
Có lẽ có những cân nhắc về hiệu suất, trong đó có lợi cho các thủ tục được lưu trữ.
1) Lưu trữ các truy vấn có lợi ích của một cuộc gọi đơn giản đến thủ tục được lưu trữ, nó gói gọn sự phức tạp. Vì trình hoạch định truy vấn biết truy vấn, nên "tối ưu hóa" dễ dàng hơn. Nhưng việc lưu là với trình lập kế hoạch truy vấn tinh vi hiện tại _minimal.
Trên hết, ngay cả khi có một chi phí nhỏ khi sử dụng truy vấn ad hoc , nếu dữ liệu của bạn được cấu trúc tốt và được lập chỉ mục cẩn thận, cơ sở dữ liệu chỉ là nút cổ chai của ứng dụng của bạn. Vì vậy, ngay cả khi có một đồng bằng nhỏ, không thể bỏ qua việc xem xét các yếu tố khác.
2) Tuy nhiên, nó đã được lập luận để lưu trữ các truy vấn phức tạp trong DB. Có hai điều cần xem xét:
a) các truy vấn phức tạp sử dụng rất nhiều cơ sở hạ tầng DB, làm tăng thời gian tìm kiếm cho mọi truy vấn khác. Bạn không thể chạy song song nhiều truy vấn tốn kém . Điều này nói lên cả thủ tục lưu trữ pro và contra , nhưng chống lại các truy vấn phức tạp .
b) Nếu truy vấn mất thời gian, tại sao phải bận tâm với chiến thắng tốc độ nhỏ của một thủ tục được lưu trữ.
tl; dr
Không có gì nói trực tiếp chống lại các thủ tục được lưu trữ. Vì vậy, sử dụng các thủ tục được lưu trữ là được - nếu nó làm cho bạn hạnh phúc.
Nhưng mặt khác: tôi không thể tưởng tượng được một trường hợp sử dụng phù hợp có thể nói một cách dứt khoát .
Khi nào tôi nên sử dụng các thủ tục được lưu trữ?
Câu trả lời thích hợp là: Bất cứ khi nào bạn thích . Nhưng có những lựa chọn khác.