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")));
4

4 回答 4

3

SqlQuery用于返回实体。我想你想要ExecuteSQlCommand

public void Delete(Example example)
{
    db.Examples.ExecuteSqlCommand("exec usp_DeleteExample @ExampleID", 
        new SqlParameter("@ExampleID", example.ExampleID)
    );
    return;
}
于 2013-11-04T17:48:38.887 回答
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 个参数,因为没有一个参数是可选的。

于 2013-11-04T17:57:01.597 回答
0

使用存储过程进行 CRUD 操作似乎存在某种限制。

如果要将存储过程用于 CUD 操作,则必须将插入、更新和删除存储过程映射到实体。不允许仅映射其中之一。

资源

于 2021-12-14T15:02:30.683 回答
-1
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);
}
于 2021-07-01T12:32:29.183 回答