Entity Framework and SCOPE_IDENTITY

前端 未结 3 1547
北海茫月
北海茫月 2021-01-21 22:09

I have a stored procedure that inserts into a table then executes this line

SET @returnVal = SCOPE_IDENTITY();

and after that I\'ve tried both:

相关标签:
3条回答
  • 2021-01-21 22:47

    context.Database.ExecuteSqlCommand return the command executing result and not the query result. If you need to get data than use context.Database.SqlQuery.

    SET @ReturnVal=SCOPE_IDENTITY() and then use the select.

    Example: How to use DbContext.Database.SqlQuery<TElement>(sql, params) with stored procedure? EF Code First CTP5

    0 讨论(0)
  • 2021-01-21 22:48

    Declare a output type of parameter in your procedure definition:

     create procedure [dbo].[Procedurename] @returnVal int output
     as 
     SET @returnVal = SCOPE_IDENTITY();
    

    and while calling the stored procedure call it as:

     declare @returnVal int
     exec Procedurename @returnVal output
     print @returnVal 
    
    0 讨论(0)
  • 2021-01-21 22:55

    taken from the OPs question

    Adding an output parameter worked (answer marked below).

    The stored procedure signature looks like this now:

    My stored procedure signature now looks like this:

    CREATE PROCEDURE SP_MyStoreProc ([Multiple Parameters], @returnVal int output)
    

    The last line of the stored procedure is:

    return @returnVal
    

    My C# code looks like this now: (db is an instance of my dbContext class)

    System.Data.Objects.ObjectParameter identityParameter = 
    new System.Data.Objects.ObjectParameter("returnVal", 0);
    
    db.SP_MyStoredProc([Multiple Parameters], identityParameter);
    
    int myNewIdentity = Convert.ToInt32(identityParameter.Value);
    
    0 讨论(0)
提交回复
热议问题