如何从 MVC 控制器调用带参数的数据库 'select' 存储过程?

How do I call a database 'select' stored procedure with parameters, from a MVC Controller?

我目前有一个控制器,它使用数据库视图中的所有行填充部分视图。

public ActionResult SearchResults()
{
    return PartialView("~/Views/TransactionHistory/_SearchResults.cshtml", db.TRANSACTION_HISTORY.ToList());
}

TRANSACTION_HISTORY是模型的名称class。以及我从中显示行的数据库视图。 db 是我的数据库上下文对象。

这是我的模型class:

namespace TransactionHistory.Models
{
    using System;
    using System.Collections.Generic;

    public partial class TRANSACTION_HISTORY
    {
        public int INTERFACE_RECORD_ID { get; set; }
        public string COMPANY { get; set; }
        public string Status { get; set; }
        public string Carrier { get; set; }
        public string Service { get; set; }
        public string Connote { get; set; }
        public string Order_Type { get; set; }
        public Nullable<decimal> Volume { get; set; }
        public Nullable<decimal> Weight { get; set; }
        public string State { get; set; }
        public string Post_Code { get; set; }
        public string Suburb { get; set; }
        public string Zone { get; set; }
        public string Book_In { get; set; }
        public string Deliver_From { get; set; }
        public string Deliver_To { get; set; }
        public string Trpt_Special_Instructions { get; set; }
        public Nullable<System.DateTime> Date_Created { get; set; }
        public Nullable<System.DateTime> From_Date { get; set; }
        public Nullable<System.DateTime> To_Date { get; set; }
        public string Picklist { get; set; }
    }
}

现在,我有一个在此视图上运行的存储过程,名为 TRANSACTION_HISTORY_SEARCH。现在它在 where 子句中接受 2 个参数(FROM_DATETO_DATE),并且 returns 与视图的行数完全相同(这意味着我不想使用不同的模型用于存储存储过程返回的行)。

那么如何利用控制器的 ActionResult 方法实际获取存储过程返回的结果,而不是数据库视图返回的所有行?

我知道我需要使用 [HttpPost] 来执行此操作,因为我将从我的视图(文本框条目)中为存储过程传递这些参数。

您可以使用Database property and call the stored procedure using SqlQuery
像这样:

 List<TRANSACTION_HISTORY> res;

 res = db.TRANSACTION_HISTORY
         .Database
         .SqlQuery<TRANSACTION_HISTORY>("TRANSACTION_HISTORY_SEARCH @FROM_DATE, @TO_DATE",
                                        new SqlParameter("@FROM_DATE", fromDate),
                                        new SqlParameter("@TO_DATE",   toDate))
         .ToList();