C# 使用存储过程仅删除实体中的内容

C# 使用存储过程仅删除实体中的内容,c#,sql-server-2008,entity-framework,stored-procedures,asp.net-web-api,C#,Sql Server 2008,Entity Framework,Stored Procedures,Asp.net Web Api,下面是我要在数据库中使用的存储过程: 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) D

下面是我要在数据库中使用的存储过程:

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")));
modelBuilder.Entity()
.MapToStoredProcess(e=>
e、 删除(v=>v.HasName(“usp_DeleteExample”);

SqlQuery
用于返回实体。我想您需要执行以下命令:

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

SqlQuery
用于返回实体。我想您需要执行以下命令:

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

我认为您应该使用
.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()
。就我个人而言,我在designer中导入SP,以便它们在C#中随时可用


还请注意,您需要添加其他3个参数,因为没有一个参数是可用的。

我认为您应该使用
.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()
。就我个人而言,我在designer中导入SP,以便它们在C#中随时可用


还要注意,您需要添加其他3个参数,因为没有一个参数是可用的。

您是否通过模型浏览器导入了存储过程?这是针对一个名为Examples的表运行的查询。我觉得有点奇怪…你有什么错误吗?您似乎只传递了一个过程显然需要更多参数的参数。另外,在数据库上运行一个跟踪,以查看进程是否真的被调用谢谢。在程序的底部发生了一个插入。在构建中还没有。删除操作在没有这些参数的情况下应该可以工作,对吗?不,因为如果您的proc需要3个参数,而您只传递了一个参数,那么调用将失败,因此不会出现任何问题。您是否通过模型浏览器导入了存储过程?这是针对一个名为Examples的表运行的查询。我觉得有点奇怪…你有什么错误吗?您似乎只传递了一个过程显然需要更多参数的参数。另外,在数据库上运行一个跟踪,以查看进程是否真的被调用谢谢。在程序的底部发生了一个插入。在构建中还没有。删除应该在没有这些参数的情况下工作,对吗?不,因为如果您的proc需要3个参数,而您只传递了一个,那么调用将失败,因此不会出现任何异常。ExecuteSqlCommand()未显示,即使在引用时也是如此。我最近升级到Entity 6.0,但我仍在使用VS2010。E6.0版不再提供了吗?谢谢。ExecuteSqlCommand()未显示,即使在引用时也是如此。我最近升级到Entity 6.0,但我仍在使用VS2010。它在E6.0中不再可用了吗?我对它们进行了注释,以使存储过程正常工作。非常感谢。为了让存储过程正常工作,我对它们进行了注释。非常感谢你。