我正在使用Repository Pattern和EF 6.我需要做的是调用一个SP来删除映射表的记录,这些记录在我正在调用SP的存储库中没有任何共同点。
我尝试过
this.dbSet.SqlQuery("exec mySP @Param1, @Param2", param1, param2);
但是这会返回我当前存储库的DB中的所有记录。就像我写了“SELECT * FROM Group”(如果我在GroupRepository中)。 我的SP没有返回任何内容,因为它删除了一些记录,我浪费了2天的搜索时间,如何调用SP。如果需要,我可以提供额外的信息。 有人可以帮忙吗?
答案 0 :(得分:2)
最后,我设法执行我的存储过程,该过程接受List< int>和一个Id。代码如下所示:
SQL SERVER:
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);
}
这最终会返回一个空List&lt; int&gt;。