在没有输出参数的情况下调用 EF 6 存储库模式中的存储过程

Call stored procedure in EF 6 Repository Pattern without output parameters

我正在使用存储库模式和 EF6。我需要做的是调用一个 SP 来删除映射记录 table,这些记录在我调用 SP 的存储库中没有任何共同之处。

我试过

this.dbSet.SqlQuery("exec mySP @Param1, @Param2", param1, param2);

但是这个 returns 我所在的当前存储库的数据库中的所有记录。就像我写的 "SELECT * FROM Group" (如果我在 GroupRepository 中)。 我的 SP returns 什么都没有,因为它删除了一些记录,我已经浪费了 2 天时间搜索如何调用 SP。如果需要,我可以提供更多信息。 有人可以帮忙吗?

最后我设法执行了我的存储过程,它接受一个 List 和一个 Id。代码如下所示:

SQL 服务器:

CREATE TYPE [dbo].[IntListType] AS TABLE
(   
    [Item] INT 
);
GO

CREATE PROCEDURE [removeEventUsersFromEvents]
(
    @EventIds [dbo].[IntListType] READONLY,
    @UserId INT
)
AS
BEGIN
    BEGIN Tran T1
        DECLARE @query NVARCHAR(MAX)
        SET NOCOUNT ON;
        SET @query = 'DELETE FROM [EventUser]
                      WHERE [EventID] IN (SELECT Item from @EventIds) AND [UserID] = @UserId';
        EXECUTE sp_executesql @query,
            N'@EventIds [dbo].[IntListType] READONLY, @UserId INT',
            @EventIds,
            @UserId;
    COMMIT Tran T1
END;

C#:

    List<int> eventIdsToBeDeleted = this.dbSet...(geting some Ids from the db);

    DataTable dt = new DataTable("IntListType");
    dt.Columns.Add("Item", typeof(Int32));

    eventIdsToBeDeleted.ForEach(id => dt.Rows.Add(id));

    var eventIds = new SqlParameter("EventIds", SqlDbType.Structured);
    eventIds.TypeName = "dbo.IntListType";
    eventIds.Value = dt;

    foreach (var user in usersToBeDeletedFromEvents)
    {
        var userId = new SqlParameter("UserId", SqlDbType.Int);
        userId.Value = user.UserID;

        this.Context.Database.SqlQuery(typeof(List<int>), 
        "EXEC removeCalendarEventUsersFromSpecificGroupAndEvents
        @CalendarEventIds,
        @UserProfileDetailId", 
        eventIds, 
        userId);
   }

这最终会 return 一个空的 List