【问题标题】:Execute non-query procedure not working asp.net core执行非查询程序不起作用 asp.net 核心
【发布时间】:2017-03-18 14:40:14
【问题描述】:

我想执行一个存储过程,它返回三个值(Email、Name、CompanyID)并获取一个参数(CompanyID),但它不起作用。

我创建了一个具有这些属性的类和一个返回数据的存储过程。通过它显示DatabaseFacade 错误。

我的代码是:

 List<MyClass> AppUser = new List<MyClass>(); //Class with three properties
 SqlParameter param1 = new SqlParameter("@CompanyID", CompanyID);
 AppUser = _context.Database.SqlQuery<CC>("GetUserAndRolesForCompany", param1).ToList(); 

显示此错误:我已包含 System.Linq

“DatabaseFacade”不包含“SqlQuery”的定义,并且找不到接受“DatabaseFacade”类型的第一个参数的扩展方法“SqlQuery”(您是否缺少 using 指令或程序集引用?)

【问题讨论】:

  • 这听起来像是一个编译错误。并不是程序不起作用,而是您使用了错误的语法。正确的方法是FromSql 如重复问题所示
  • 这会返回 DbSet 但为什么要使用它来从存储过程中返回列表 有什么方法可以从 SP 中返回列表吗?

标签: linq stored-procedures asp.net-core asp.net-core-mvc entity-framework-core


【解决方案1】:

从此链接https://docs.microsoft.com/en-us/ef/core/querying/raw-sql获取帮助

在 Core 2.0 或 EntityFramework 7 中,不支持 ef 6 之前版本中提供的 SqlQuery 功能。

以下是如何在 EntityFramework 7 中执行 sp 的示例。

 public List<UserDetails> GetUserDetailsUsingSP(int LoggedInID)
        {
            var loggedInUser = new SqlParameter("Id", LoggedInID);

            return WidServices
                .FromSql("EXECUTE WID_Services_GetAll  @Id ", loggedInUser)
                .FirstOrDefault();
        }

注意:在主数据库上下文类下添加 DbSet 的位置添加此方法,然后通过实例化 dbContext 调用此方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-05
    • 2017-08-17
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    相关资源
    最近更新 更多