【发布时间】:2016-09-20 02:08:28
【问题描述】:
我正在使用实体框架使用 ASP.NET MVC 编写一个 Web 应用程序。
我在 C# 中这样调用过程:
var result = context.EditTechInfo(user.id, user.telephone, user.email);
context 是实体框架实例。
我有一个总是返回-1的过程,但它执行UPDATE它应该做的事情。我尝试使用SELECT 而不是RETURN 返回我的值,但无济于事。
程序如下:
ALTER PROCEDURE EditTechInfo
(@tech INT,
@telephone CHAR(10),
@email VARCHAR(64))
AS
BEGIN
SET NOCOUNT ON
DECLARE @result INT = 0
IF EXISTS (SELECT * FROM Techs WHERE id = @tech AND statut = 1)
BEGIN
UPDATE Techs
SET telephone = @telephone, email = @email
WHERE id = @tech
SET @result = 1
END
--ELSE
--BEGIN
--SET @result = -1
--END
SELECT @result
END
即使 -1 可能是返回值的部分被注释...
我知道如果一个过程返回 -1 就意味着有一个错误,但我不知道在哪里也不知道为什么......
----编辑--------
正如评论中所问,这是 EF 生成的内容:
public virtual int EditTechInfo(Nullable<int> tech, string telephone, string email)
{
var techParameter = tech.HasValue ?
new ObjectParameter("tech", tech) :
new ObjectParameter("tech", typeof(int));
var telephoneParameter = telephone != null ?
new ObjectParameter("telephone", telephone) :
new ObjectParameter("telephone", typeof(string));
var emailParameter = email != null ?
new ObjectParameter("email", email) :
new ObjectParameter("email", typeof(string));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("EditTechInfo", techParameter, telephoneParameter, emailParameter);
}
【问题讨论】:
-
你的
IF EXISTS表达式返回什么? -
@Shyju 从我推断的结果来看,它返回true,因为更新语句被执行了
-
EditTechInfo是如何定义的?我敢打赌 EF 直接搞砸了,或者因为它和你的存储过程不匹配。 -
如果您怀疑发生了异常,或者如果您确实想为过程使用返回值,则可以使用
BEGIN TRY...BEGIN CATCH捕获任何异常,将@result参数标记为作为INT OUTPUT并将其传递给模型/控制器代码中的结果变量。 -
您对 sp 的排序和从 c# 代码调用的顺序不同..请注意
标签: sql-server asp.net-mvc entity-framework stored-procedures