当前位置: 首页 > 面试题库 >

对于实体框架中的所有情况,存储过程返回-1

南宫保臣
2023-03-14
问题内容
CREATE PROC spIsValidUser
     @UserName varchar(50),
     @Password varchar(50) 
AS
    IF  Exists(SELECT * FROM Users where UserName=@UserName and Password=@Password)
    BEGIN
        return 0

    END
    ELSE
    BEGIN
        return 1
    END
 GO

我已经创建了这个Stored Procedure并且尝试Stored Procedure使用实体框架来调用它。下面是用C#编写的代码。

MyBusEntities db = new MyBusEntities();
int empQuery = db.spIsValidUser("abc", "abc@123");

spIsValidUser Stored Procedure``-1在所有情况下都返回。请让我知道错误。

编辑 -根据给定的答案,不使用存储过程的return语句,因为Entity
Framework不支持开箱即用的存储过程返回标量值。让我知道如何从中发送标量数据Stored Procedure


问题答案:

您的存储过程当前返回 量值。使用以下步骤来解决此问题:

  • 像这样更改您的存储过程(不要return在存储过程中使用关键字返回值,Entity Framework无法支持存储过程立即返回 量值。但是可以解决):

    ALTER PROC spIsValidUser
    

    @UserName varchar(50),
    @Password varchar(50)
    AS
    SELECT Count(*) FROM Users where UserName= @UserName and Password= @Password
    return

  • 您需要将存储过程导入为Function。右键单击实体模型的工作区,然后选择Add -> Function Import

  • Add Function Import对话框中,输入要在模型中引用存储过程的名称,从下拉列表中选择过程,然后将过程的返回值选择为 Scalar

  • 最后,像这样编写代码:

    MyBusEntities db = new MyBusEntities();
    

    System.Nullable empQuery = db.spIsValidUser(“abc”, “abc@123”).SingleOrDefault().Value;
    MessageBox.Show(empQuery.ToString());// show 1 if Exist and 0 if not Exist

编辑: 我认为对存储过程返回值的支持取决于Entity Framework的版本。另外,Entity
Framework不具有丰富的存储过程支持,因为它是ORM而不是SQL的替代品。



 类似资料:
  • 问题内容: 我试图从存储过程中获取简单的输出 和我的MVC 但是当我编译时,在以下部分出现错误: 方法’sp_getrandomnumber’的重载没有接受1个参数 名称“ randoms”在当前上下文中不存在 提前非常感谢希什 问题答案: 您的问题是您的SPROC输出是一个int。 请参见Scott Gu的文章中的以下引用。 “ LINQ to SQL将SPROC中的“ out”参数映射为参考参

  • 问题内容: 背景 我将项目中的LINQ-to-SQL代码更改为Entity Framework。大部分更改都相对简单,但是,我遇到了一个相当大的问题。使用LINQ-to- SQL,我能够使用如下存储过程来加载整个对象图(针对模型B): 但是,将这段代码转换为EF之后,在访问ViewModel.Model.ModelBs的行上,出现错误“ EntityCommandExecutionExceptio

  • 有几个很好的博客关于如何使用泛型类实现存储库模式和工作单元模式。 使用实体框架6.1实现数据访问层 实现存储库和工作单元模式 这个想法是,定义一个通用接口IRepository和一个隐藏数据实际访问方式的类存储库。可以使用实体框架DbContext来访问它,或者存储库可能是用于单元测试的内存集合。 我经常看到添加了几个与Queryable和/或Enumerable函数类似的Query函数。 例如,

  • 我正在使用spring数据JPA存储库来调用存储过程。就好像在整个应用程序中,我们对存储过程有严格的依赖性一样,我必须使用非实体存储过程调用。以下是我选择的称呼方式: 它适用于存储过程返回单个结果集的所有情况。 但是它不适用于返回多个结果集的存储过程。它只返回第一个结果集,不给出任何错误。 在我们的项目中,我们有spring-boot-starter-data-jpa版本1.5.8和hiberna

  • 我有一个存储过程,它接受参数并返回一个长值。 我如何使用jdbcTemplate来调用这个存储过程并获得返回的值。 这样对吗?

  • 我对Entity Framework 6非常陌生,我想在我的项目中实现存储过程。我有一个存储过程,如下所示: 班级: 我的问题是:如何调用存储过程并向其中传递参数?