EF không hỗ trợ nhập các thủ tục đã lưu trữ mà xây dựng tập kết quả từ:
- Truy vấn động
- Bảng tạm thời
Lý do là để nhập thủ tục EF phải thực thi nó . Thao tác như vậy có thể nguy hiểm vì nó có thể kích hoạt một số thay đổi trong cơ sở dữ liệu. Do đó EF sử dụng lệnh SQL đặc biệt trước khi thực thi thủ tục được lưu trữ:
SET FMTONLY ON
Bằng cách thực hiện lệnh này, thủ tục được lưu trữ sẽ chỉ trả về "siêu dữ liệu" về các cột trong tập kết quả của nó và nó sẽ không thực thi logic của nó. Nhưng vì logic không được thực thi nên không có bảng tạm thời (hoặc truy vấn động được xây dựng) nên siêu dữ liệu không chứa gì.
Bạn có hai lựa chọn (ngoại trừ lựa chọn yêu cầu viết lại quy trình đã lưu trữ của bạn để không sử dụng các tính năng này):
- Xác định kiểu phức tạp trả về theo cách thủ công (tôi đoán nó sẽ hoạt động)
- Sử dụng một bản hack và chỉ để thêm quy trình được lưu trữ ở đầu
SET FMTONLY OFF
. Điều này sẽ cho phép phần còn lại của mã SP của bạn thực thi theo cách bình thường. Chỉ cần đảm bảo rằng SP của bạn không sửa đổi bất kỳ dữ liệu nào vì những sửa đổi này sẽ được thực thi trong quá trình nhập! Sau khi nhập thành công, hãy xóa bản hack đó.