如何使用实体框架调用SQL Server过程

本文关键字:SQL Server 过程 调用 框架 何使用 实体 | 更新日期: 2023-09-27 18:17:22

我有以下SQL Server代码:

ALTER PROCEDURE Checking
@name NVARCHAR(200),
@password NVARCHAR(200)
AS
Begin
    SET NOCOUNT ON
        DECLARE @res int
        SELECT @res = COUNT(*)
        FROM [User]
        WHERE [User].Username = @name AND [User].PasswordHashed = HASHBYTES('SHA2_512', @password)
        return @res
END

可以看到,该过程返回一个Int32值。在我的c#代码中,我想使用实体框架6使用这个方法,我有以下代码:

SearchEngineEntities context = new SearchEngineEntities();
//Show the returned value by calling checking procedure in C#

如何在c#中获得检查过程的返回值?我已经看到这里和这里,但我想知道是否有一个直接的方式在实体框架。

如何使用实体框架调用SQL Server过程

这个链接展示了如何使用Visual Studio实体数据向导导入和执行存储过程。你可以自己动手操作。

更新: Mike正确地注释了我之前分享的链接描述了如何将存储过程导入实体框架数据模型。

成功导入存储过程后,EF将自动在DbContext扩展类(在您的示例中为SearchEngineEntities)中生成一个方法,该方法与数据库中的存储过程相对应。对于您的过程,它应该创建一个方法,该方法接受两个string参数并返回封装在ObjectResult类型中的int结果。根据您的配置,它应该类似于以下内容(未测试):

public virtual ObjectResult<Nullable<int>> Checking(string name, string password)
{
    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Nullable<int>>("Checking", name, password);
}

您可以通过调用context.Checking("name", "pass")来调用存储过程。遍历返回的ObjectResult以查找过程返回的结果。