2011-06-08 45 views
8

Tôi có hai thủ tục lưu trữ đơn giản trong SQLServer:thực hiện thủ tục lưu trữ từ một DbContext

  • SetData(@id int, @data varchar(10))
  • GetData(@id int).

GetData hiện trả về một kết quả một hàng, một cột, nhưng tôi có thể thay đổi thành một hàm phù hợp nếu cần.

Cách tốt nhất để thực hiện điều này từ phiên bản DbContext là gì?

Nếu có thể, tôi muốn tránh phải thực hiện quản lý trạng thái kết nối của riêng mình và/hoặc hiển thị các loại cụ thể theo EF. Tôi bắt đầu bằng cách truy xuất ObjectContext và xem các chức năng Execute*, nhưng tài liệu này khá tệ và thiếu các ví dụ liên quan đến các thủ tục được lưu trữ.

Lý tưởng nhất, tôi muốn để có thể làm điều này:

myContext.ExecuteNonQuery("SetData", id, data); 
var data = myContext.ExecuteScalar<string>("GetData", id); 

Trả lời

21

DbContext cung cấp các chức năng này. Sử dụng:

IEumerable<...> result = myContext.Database.SqlQuery<...>(...) 

để thực hiện thu hồi thủ tục lưu trữ và

int result = myContext.Database.ExecuteSqlCommand(...) 

để thực hiện sửa đổi dữ liệu thủ tục lưu trữ.

+0

Còn các thông số thì sao? Tôi có phải làm như được chỉ định ở đây hoặc có lối tắt không? http://stackoverflow.com/questions/4873607/how-to-use-dbcontext-database-sqlquerytelementsql-params-with-stored-procedu/4874600#4874600 –

+0

Đó là một cách. Nó cũng sẽ làm việc mà không sử dụng 'SqlParameter' - chỉ cần truyền các giá trị. Tôi không chắc chắn nếu bạn không phải tham khảo chúng bằng @ p0, @ p1, v.v. khi sử dụng trực tiếp các giá trị. –

+0

Tôi đã kết thúc việc truyền một đối tượng ẩn danh và chuyển nó sang SqlParameters bên trong. –

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