2016-08-21 30 views
5

là có thể thực hiện một thủ tục được lưu trữ bằng EF, chọn bản ghi từ cơ sở dữ liệu từ hai hoặc nhiều bảng bằng cách sử dụng tham gia bên trong và nối ngoài bên trái.Thực hiện thủ tục lưu sẵn bằng khung thực thể

quan điểm của tôi là tránh phương pháp tham gia vào EF hoặc LINQ, mà tôi có nhiều vấn đề với nó.

vì vậy nếu tôi tạo thủ tục đó, tôi có thể gọi nó với tham số từ đầu vào của người dùng không, có thể gán kết quả cho phương thức .ToList() và sau đó thêm kết quả vào asp: repeater .DataSource.

Tôi biết nó có thể là một câu hỏi lạ, nhưng tôi muốn làm điều này vì nhiều lý do trước tiên, để sử dụng EF vì tôi cảm thấy thoải mái hơn. giây, để loại bỏ việc sử dụng các kết nối trong EF. thứ ba, tôi đọc ở đâu đó rằng việc sử dụng thủ tục được lưu trữ sẽ nâng cao hiệu suất truy vấn, khi được sử dụng để gọi truy vấn thường xuyên.

nếu có ai có thể giúp tôi trả lời những câu hỏi này với ví dụ, tôi sẽ đánh giá cao.

+0

cả sql-server và mysql? cũng là EF nó mã đầu tiên? – Whencesoever

Trả lời

14

Bạn có thể gọi SqlQuery từ bối cảnh dữ liệu Khuôn khổ thực thể của mình.

context.Database.SqlQuery<YourType>("exec usp_StoredProcedure").ToList() 

Bạn sẽ cần một lớp học để lập bản đồ kết quả truy vấn trở lại, như một ví dụ:

public class YourType 
{ 
    public string Property1 { get; set; } 
    public string Property2 { get; set; } 
} 

Bạn cũng có thể chỉ định các thông số để truy vấn như hình dưới đây:

SqlParameter parameter1 = new SqlParameter("@Parameter1", "Value"); 
context.Database.SqlQuery<YourType>("exec usp_StoredProcedure @Parameter1", parameter1).ToList() 
+0

Có Tôi biết rằng @ darren nhưng trong tình huống của tôi gọi truy vấn này là rất phức tạp và sẽ được sử dụng thường xuyên trong ứng dụng của tôi, vì vậy tôi thích sử dụng SP gọi. câu hỏi của tôi ở đây là làm thế nào để gọi '.ToList()' phương pháp cho resul. –

+0

@ FaresAyyad - Tôi đã đưa ra giải pháp để thực thi SP. Điều gì dường như là vấn đề? –

+0

@DarrrenDavies lớp học để có được kết quả truy vấn là gì? –

0

Chúng tôi sẽ xem cách thực hiện thủ tục lưu sẵn trong Entity Framework, trong MVC, chúng ta sẽ xem cách thêm EF.

Thực thi tập lệnh sau trong cơ sở dữ liệu để tạo thủ tục được lưu trữ.

CREATE PROCEDURE FETCHEMPLOYEES AS 
BEGIN 
    SELECT * FROM EMPTABLE 
END 

CREATE PROCEDURE FETCHEMPLOYEE(@ID INT) AS 
BEGIN 
    SELECT * FROM EMPTABLE WHERE ID = @ID 
END 



public class EmpModel 
{ 
    EmployeeEntities empdb = new EmployeeEntities(); 

    public List<EMPTABLE> GetEmployees() 
    { 
     return empdb.FETCHEMPLOYEES().ToList(); 
    } 

    public EMPTABLE GetEmployee(int? id) 
    { 
     return empdb.FETCHEMPLOYEE(id).ToList().Single(); 
    } 
} 

public class EmployeeController : Controller 
{ 
    Models.EmpModel mod = new Models.EmpModel(); 

    public ActionResult Index() 
    { 
     List<EMPTABLE> result = mod.GetEmployees(); 
     return View(result); 
    } 

    public ActionResult Details(int id) 
    { 
     EMPTABLE result = mod.GetEmployee(id); 
     return View(result); 
    } 
} 

Đối với bước nữa bởi các chi tiết bước, vui lòng tham khảo theo liên kết: http://dotnetvisio.blogspot.in/2014/01/execute-stored-procedure-using-entity.html

0

bạn có thể sử dụng ExecuteFunction của ObjectContext lớp:

public virtual ObjectResult<CustomClassForStoreReturnedData> NameOfStoredProcedure(Nullable<int> tableID) 
    { 
     var IDParameter = tableID.HasValue ? 
      new ObjectParameter("tableID", tableID) : 
      new ObjectParameter("tableID", typeof(int)); 

     return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<CustomClassForStoreReturnedData>("NameOfStoredProcedureInSQLDatabase", IDParameter); 
    } 
Các vấn đề liên quan