【发布时间】:2021-12-14 23:02:30
【问题描述】:
这是我想在我的数据库中使用的存储过程:
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配置:
modelBuilder.Entity<Example>()
.MapToStoredProcedures(e =>
e.Delete(v => v.HasName("usp_DeleteExample")));
【问题讨论】:
-
您是否通过模型浏览器导入了存储过程?这是针对看似名为 Examples 的表运行的查询。对我来说似乎有点奇怪......
-
你有什么错误吗?您似乎只传递了一个过程显然需要更多参数的参数。此外,在 DB 上运行跟踪以查看 PROC 是否真的被调用
-
谢谢。程序底部有一个插入。构建中还没有。删除应该可以在没有这些参数的情况下工作,对吧?
-
否,因为如果您的 proc 需要 3 个参数而您只传递一个,则调用将失败,因此不会发生任何事情
-
如果使用
MapToStoredProcedures,则无需在代码中调用存储过程。您知道MapToStoredProcedures的含义和作用吗?
标签: c# sql-server-2008 entity-framework stored-procedures asp.net-web-api