I tried to call a stored procedure from entity framework 4.1 (mvc 3 web application). Its not throwing an exception but the insert/update is not happening? When I manually executed the stored proc it works.
CREATE PROCEDURE [dbo].[SP_AddUpdateResponse]
@QuestionID int,
@UserID int,
@AnswerValue nvarchar(2000),
@ReviewID int
AS
MERGE [dbo].[Responses] AS [Target]
USING (SELECT @QuestionID, @UserID, @AnswerValue, @ReviewID)
AS [Source] ([QuestionID], [UserID], [AnswerValue], [ReviewID] )
ON [Target].[QuestionID] = [Source].[QuestionID]
AND [Target].[ReviewID] = [Source].[ReviewID]
WHEN MATCHED THEN
UPDATE SET [AnswerValue] = [Source].[AnswerValue]
WHEN NOT MATCHED THEN
INSERT ( [QuestionID], [UserID], [AnswerValue], [ReviewID] )
VALUES ( [Source].[QuestionID], [Source].[UserID],
[Source].[AnswerValue], [Source].[ReviewID] );
Code that calls the procedure:
using System.Data.SqlClient;
using System.Data.Metadata.Edm;
using (var db = new NexGenContext())
{
foreach (var key in formCollection.AllKeys)
{
var answer = formCollection[key];
int questionId = Convert.ToInt32(key);
db.Database.SqlQuery<EntityType>(
"EXEC SP_AddUpdateResponse @QuestionID, @UserID, @AnswerValue, @ReviewID",
new SqlParameter("@QuestionID", questionId),
new SqlParameter("@UserID", 9999),
new SqlParameter("@AnswerValue", answer),
new SqlParameter("@ReviewID", id)
);
}
}
try to use ExecuteSqlCommand instead of SqlQuery
db.Database.ExecuteSqlCommand(
"EXEC SP_AddUpdateResponse @QuestionID, @UserID, @AnswerValue, @ReviewID",
new SqlParameter("@QuestionID", questionId),
new SqlParameter("@UserID", 9999),
new SqlParameter("@AnswerValue", answer),
new SqlParameter("@ReviewID", id)
);
In description of the SqlQuery method said: "Use method to return entities that are tracked by the context", so you can use it only for SELECT queries.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With