Sử dụng các thủ tục được lưu trữ là một cách, và đã được sử dụng rộng rãi trong nhiều năm.
Một cách hiện đại hơn để tương tác với cơ sở dữ liệu SQL Server từ C # (hoặc bất kỳ ngôn ngữ .NET nào) là sử dụng Entity Framework. Ưu điểm của Entity Framework là nó cung cấp mức độ trừu tượng cao hơn.
Để trích dẫn từ Microsoft ( https://msdn.microsoft.com/en-us/data/jj590134 ):
Khung thực thể ADO.NET cho phép các nhà phát triển tạo các ứng dụng truy cập dữ liệu bằng cách lập trình theo mô hình ứng dụng khái niệm thay vì lập trình trực tiếp với lược đồ lưu trữ quan hệ. Mục tiêu là giảm số lượng mã và bảo trì cần thiết cho các ứng dụng hướng dữ liệu. Các ứng dụng Entity Framework cung cấp các lợi ích sau:
- Các ứng dụng có thể hoạt động theo mô hình khái niệm tập trung vào ứng dụng hơn, bao gồm các loại có tính kế thừa, các thành viên phức tạp và các mối quan hệ.
- Các ứng dụng được giải phóng khỏi các phụ thuộc được mã hóa cứng trên một công cụ dữ liệu hoặc lược đồ lưu trữ cụ thể.
- Các ánh xạ giữa mô hình khái niệm và lược đồ lưu trữ cụ thể có thể thay đổi mà không thay đổi mã ứng dụng.
- Các nhà phát triển có thể làm việc với một mô hình đối tượng ứng dụng nhất quán có thể được ánh xạ tới các lược đồ lưu trữ khác nhau, có thể được triển khai trong các hệ thống quản lý cơ sở dữ liệu khác nhau.
- Nhiều mô hình khái niệm có thể được ánh xạ tới một lược đồ lưu trữ duy nhất.
- Hỗ trợ truy vấn tích hợp ngôn ngữ (LINQ) cung cấp xác thực cú pháp thời gian biên dịch cho các truy vấn theo mô hình khái niệm.
Việc sử dụng ORM so với các thủ tục được lưu trữ liên quan đến sự đánh đổi, đặc biệt là về mặt bảo mật và nơi logic tồn tại.
Cách tiếp cận "cổ điển" để phát triển với SQL Server là để logic ứng dụng nằm trong các thủ tục và chương trình được lưu trữ chỉ được trao quyền bảo mật để thực thi các thủ tục được lưu trữ, chứ không phải cập nhật bảng trực tiếp. Khái niệm ở đây là các thủ tục được lưu trữ là lớp logic nghiệp vụ cho (các) ứng dụng. Trong khi lý thuyết là âm thanh, nó có xu hướng không được ủng hộ vì nhiều lý do, được thay thế bằng cách thực hiện logic kinh doanh trong một ngôn ngữ lập trình như C # hoặc VB. Các ứng dụng tốt vẫn được triển khai theo cách tiếp cận theo từng cấp, bao gồm tách các mối quan tâm, v.v. nhưng có nhiều khả năng đi theo một mô hình như MVC.
Một nhược điểm của việc triển khai logic trong ORM thay vì cơ sở dữ liệu là dễ gỡ lỗi và kiểm tra các quy tắc toàn vẹn dữ liệu của những người chịu trách nhiệm về cơ sở dữ liệu (DA hoặc DBA). Lấy ví dụ kinh điển về việc chuyển tiền từ séc của bạn sang tài khoản tiết kiệm, điều quan trọng là việc này phải được thực hiện như một đơn vị công việc nguyên tử, nói cách khác là kẹp trong một giao dịch. Nếu loại chuyển nhượng này chỉ được phép thực hiện thông qua một thủ tục được lưu trữ, thì DA và kiểm toán viên tương đối dễ dàng đối với QA thủ tục được lưu trữ.
Mặt khác, nếu điều này được thực hiện thông qua ORM như Entity Framework và trong sản xuất, người ta phát hiện ra rằng trong những trường hợp hiếm hoi, tiền được lấy từ việc kiểm tra nhưng không được đưa vào gỡ lỗi tiết kiệm có thể phức tạp hơn nhiều, đặc biệt là nếu có nhiều chương trình có liên quan. Đây rất có thể là một trường hợp cạnh, có lẽ liên quan đến các vấn đề phần cứng đặc biệt cần phải xảy ra theo một trình tự cụ thể, vv Làm thế nào để kiểm tra điều này?