11

Tôi sử dụng Khung pháp nhân 4.1 Mã đầu tiên. Tôi muốn gọi một thủ tục lưu sẵn có tham số đầu ra và lấy giá trị của tham số đầu ra đó ngoài tập kết quả được đánh máy mạnh. Chức năng tìm kiếm của nó có chữ ký như thế nàyEF4.1 Mã Đầu tiên: Quy trình được lưu trữ với thông số đầu ra

public IEnumerable<MyType> Search(int maxRows, out int totalRows, string searchTerm) { ... } 

Tôi đã tìm thấy rất nhiều gợi ý cho "Nhập khẩu chức năng" nhưng không tương thích với Mã đầu tiên. Tôi có thể gọi các thủ tục được lưu trữ bằng Database.SqlQuery (...) nhưng không hoạt động với các tham số đầu ra.

Tôi có thể giải quyết vấn đề đó bằng cách sử dụng mã EF4.1 trước hết không?

Trả lời

26

SqlQuery hoạt động với thông số đầu ra nhưng bạn phải xác định chính xác truy vấn SQL và thiết lập SqlParameter s. Hãy thử một cái gì đó như:

var outParam = new SqlParameter(); 
outParam.ParameterName = "TotalRows"; 
outParam.SqlDbType = SqlDbType.Int; 
outParam.ParameterDirection = ParameterDirection.Output; 

var data = dbContext.Database.SqlQuery<MyType>("sp_search @SearchTerm, @MaxRows, @TotalRows OUT", 
       new SqlParameter("SearchTerm", searchTerm), 
       new SqlParameter("MaxRows", maxRows), 
       outParam); 
var result = data.ToList(); 
totalRows = (int)outParam.Value; 
+0

Hoàn hảo! Các phần còn thiếu là "ParameterDirection.Output" và "OUT" sau "@totalRows" trong danh sách tham số truy vấn. Cảm ơn! –

+0

Điều này dường như không hoạt động khi bạn có nhiều tham số OUTPUT. Giá trị cho mỗi giá trị rỗng. Bất kỳ may mắn làm điều này với nhiều tham số OUTPUT? –

+0

sp của tôi trả về không có gì .... vì vậy những gì cần được thực hiện trong trường hợp đó .... SqlQuery không hoạt động .... bất kỳ suggesions? –

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