这是我想在我的数据库中使用的存储过程:
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 :(得分:3)
SqlQuery
用于返回实体。我想你想要ExecuteSQlCommand
:
public void Delete(Example example)
{
db.Examples.ExecuteSqlCommand("exec usp_DeleteExample @ExampleID",
new SqlParameter("@ExampleID", example.ExampleID)
);
return;
}
答案 1 :(得分: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。
答案 2 :(得分:0)
public HttpResponseMessage Delete(int id)
{
conn.ConnectionString = @"Data Source=DESKTOP-QRACUST\SQLEXPRESS;Initial Catalog=LeadManagement;Integrated Security=True";
conn.Open();
DataTable dt = new DataTable();
using (conn)
//data get by query
//using (var cmd = new SqlCommand("DELETE FROM EmployeeDetails WHERE EmployeeId=3;", conn))
//data get by sp
using (var cmd = new SqlCommand("EmployeeDetailsDelete", conn))
using (var da = new SqlDataAdapter(cmd))
{
da.Fill(dt);
}
return Request.CreateResponse(HttpStatusCode.OK, dt);
}