1

這裏是我的存儲過程我想在我的數據庫使用:使用存儲過程只刪除實體

ALTER PROCEDURE dbo.usp_DeleteExample 
@ExampleID int, @LoggedInUserID int, @SessionID int, @AppID smallint 
as 

Declare @ExampleName varchar(255) 

Set @ExampleName = (Select VehicleName from Example where ExampleID = @ExampleID) 

Delete from ExampleToGeofence where ExampleID = @ExampleID; 


exec usp_DeleteExampleHistoryData @ExampleID; 
Delete From Example where ExampleID = @ExampleID; 

Insert into UserActionHistory(ActionID, UserID, SessionID, ItemID, OldValue, ApplicationID, EventUTCDate) 
Values (203, @LoggedInUserID, @SessionID, @ExampleID, @ExampleName, @AppID, getutcdate()); 

這裏是我的代碼,我想要使用它:

public Example Delete(Example example) 
{ 
    db.Examples.SqlQuery("usp_DeleteExample @ExampleID", 
     new SqlParameter("ExampleID", example.ExampleID) 
    ); 
    db.SaveChanges(); 

    return example; 
} 

然而, ,當我通過我的WebAPI調用它時,沒有任何東西被刪除。

我在這裏做錯了什麼?如果您需要更多信息,請告訴我。

謝謝。

編輯:我只是說

模型構建器配置:

modelBuilder.Entity<Example>() 
    .MapToStoredProcedures(e => 
     e.Delete(v => v.HasName("usp_DeleteExample"))); 
+0

您是否通過模型瀏覽器導入了存儲過程?這是針對似乎是一個名爲Examples的表的查詢運行。似乎有點奇怪,我... –

+0

見編輯。謝謝。 – nzondlo

+0

你有什麼錯誤嗎?您似乎只通過一個參數,而程序顯然需要更多。此外,在數據庫上運行跟蹤以查看PROC是否真的被稱爲 – Diego

回答

2

我相信你應該使用DbContext.Database.ExecuteSqlCommand。我不知道有任何這樣的格式DbContext.TableName.ExecuteSqlCommand

db.Database.ExecuteSqlCommand("usp_DeleteExample @ExampleID, @LoggedInUserID, @SessionID, @AppID ", 
     new SqlParameter("LoggedInUserID", variableName), new SqlParameter("SessionID", variableName),new SqlParameter("AppID ", variableName));  

因爲您沒有修改實體,所以也不需要撥打SaveChanges()。就我個人而言,我將SP導入設計人員,以便他們隨時可用C#提供。

另請注意,您需要添加其他3個參數,因爲沒有參數是optional

+0

我評論他們讓存儲過程工作。非常感謝你。 – nzondlo

3

SqlQuery用於回報實體。我想你想要ExecuteSQlCommand

public void Delete(Example example) 
{ 
    db.Examples.ExecuteSqlCommand("exec usp_DeleteExample @ExampleID", 
     new SqlParameter("@ExampleID", example.ExampleID) 
    ); 
    return; 
} 
+0

謝謝。即使引用,ExecuteSqlCommand()也不會顯示出來。我最近升級到Entity 6.0,但我仍然使用VS2010。它在E6.0中不再可用嗎? – nzondlo

+1

@nzondlo - 對。請注意我以前的意見,也是我的答案... –