2014-09-05 23 views
2

我在數據庫中的存儲過程:存儲過程調用不工作Entrity框架5碼第一

ALTER PROCEDURE [dbo].[DeletePaySlip] 
    @PayRunId BIGINT, 
    @EmployeeId BIGINT 
AS 
BEGIN 
    DECLARE @PaySlipId BIGINT 

    BEGIN TRY 
     SELECT @PaySlipId = Id 
     FROM PYREmployeePaySlip 
     WHERE PayRunId = @PayRunId AND EmployeeId = @EmployeeId 

     BEGIN TRANSACTION t1 

     IF @PaySlipId IS NOT NULL 
     BEGIN 
      DELETE FROM PYREmployeePaySlipDetail WHERE PaySlipId = @PaySlipId 
      DELETE FROM PYREmployeePaySlip WHERE Id = @PaySlipId 
     END 

     COMMIT TRANSACTION t1 
    END TRY 
    BEGIN CATCH 
     ROLLBACK TRANSACTION t1 
    END CATCH; 

END 

如果我執行從SQL查詢窗口中的存儲過程,它的工作原理。

現在我試圖調用從C#代碼存儲過程

public bool DeleteEmployeePaySlip(long payRunId, long employeeId) 
{ 
      bool success = true; 
      var sqlparamPayRunId = new SqlParameter("@PayRunId", payRunId); 
      var sqlparamEmployeeId = new SqlParameter("@EmployeeId", employeeId); 

      using (var dbContext = new CRMDbContext()) 
      {     
       try 
       { 
        var res = dbContext.Database.SqlQuery<Object>("EXEC DeletePaySlip @PayRunId, @EmployeeId", 
                 sqlparamPayRunId, 
                 sqlparamEmployeeId); 
       } 
       catch (DbEntityValidationException e) 
       { 
        foreach (var eve in e.EntityValidationErrors) 
        { 
         foreach (var ve in eve.ValidationErrors) 
         { 

         } 
        } 
        throw; 
       } 
      } 

      return success; 
     } 

當我致電上述方法,它不會引發任何錯誤。但是這個存儲過程似乎沒有被調用。

回答

0

根據該documentation,表達

dbContext.Database.SqlQuery<Object>("EXEC DeletePaySlip @PayRunId, @EmployeeId", 
                sqlparamPayRunId, 
                sqlparamEmployeeId); 

...將 「並[c] reate原始SQL查詢,將返回給定的一般類型的元素」。

那麼它返回(你的對象res)將是這一類型的:

DbRawSqlQuery<object> 

這不是(還)的查詢結果:它更像一個查詢的封裝。在枚舉結果之前,您不會得到結果(最重要的是,從您的角度來看,SQL將不會執行)。

但實際上,它看起來像我在使用錯誤的方法來執行您的存儲過程。這根本不是查詢,而是數據操作。所以試試這個:

dbContext.Database.ExecuteSqlCommand("EXEC DeletePaySlip @PayRunId, @EmployeeId", 
                sqlparamPayRunId, 
                sqlparamEmployeeId); 

看看here瞭解更多詳情。

+0

謝謝你的回答。我已經嘗試了ExecuteSqlCommand()方法,因爲我的存儲過程是非查詢。有效! – 2014-09-09 09:58:46

相關問題