【发布时间】:2016-09-06 19:47:25
【问题描述】:
在使用 Entity Framework 的测试应用程序中,我从以下存储过程中获得了返回值 1 的值。在 SQL Server Management Studio 中,我根据身份返回正确的值,例如 33、45、等。
存储过程:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Procedure [dbo].[sp_testCredentials]
@mainPiece int,
@textInfo varchar(25),
@state int,
@UserName varchar(20)
AS
DECLARE @returnVal AS INT
IF (@mainPiece = 0)
BEGIN
INSERT INTO userList (@textInfo, @state, enteredUser, lastUpdatedUser)
VALUES (@textInfo, @state, @UserName, @UserName)
SET @returnVal = @@identity
END
RETURN @returnVal
Entity Framework C# 中的存储过程调用
public virtual int sp_testCredentials(Nullable<int> mainPiece, string textInfo, Nullable<int> state, string UserName)
{
var mainParameter = mainPiece.HasValue ?
new ObjectParameter("mainPiece ", mainPiece ) :
new ObjectParameter("mainPiece ", typeof(int));
var textParameter = textInfo != null ?
new ObjectParameter("textInfo ", textInfo ) :
new ObjectParameter("textInfo" , typeof(string));
var stateParameter = state.HasValue ?
new ObjectParameter("state", state) :
new ObjectParameter("state", typeof(int));
var nameParameter = UserName != null ?
new ObjectParameter("UserName ", UserName) :
new ObjectParameter("UserName ", typeof(string));
var test = ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction
("sp_testCredentials", mainParameter,
textParameter, stateParameter, nameParameter);
return test;
}
【问题讨论】:
-
ExecuteFunction不是为了这个目的从存储过程中获取输出;使用ExecuteStoreQuery -
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本没有前缀!
标签: sql-server entity-framework visual-studio stored-procedures