0

В настоящее время у меня есть контроллер, который заполняет частичный вид всеми строками из представления базы данных.Как мне вызвать базу данных «выбрать» обработанную процедуру с параметрами из MVC-контроллера?

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

TRANSACTION_HISTORY - название модели. а также представление базы данных, из которого я показываю строки. db - это мой объект контекста базы данных.

Это моя модель класса:

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. Теперь это принимает 2 параметра (FROM_DATE и TO_DATE) в предложении where и возвращает то же количество строк, что и представление (это означает, что я не хочу использовать другую модель для хранения строк, возвращаемых хранимой процедурой).

Как я могу использовать метод контроллера ActionResult, чтобы фактически получить результаты, возвращаемые хранимой процедурой, а не все строки, возвращаемые представлением базы данных?

Я понимаю, что для этого действия мне нужно использовать [HttpPost], так как я передам эти параметры для хранимой процедуры из своего представления (записи в текстовом поле).

+0

(1) Вам не нужно POST (это может быть GET, так как ваши не меняющиеся данные). (2) Почему не простой оператор linq '.Where()', например. 'db.TRANSACTION_HISTORY.Where (x => FROM_DATE> = fromDate && x => x.TO_DATE <= toDate);'? –

+0

Спасибо. Просто я работаю над устаревшими базами данных, у которых уже есть хранимые процедуры, и мои работодатели предпочитают, чтобы я их использовал. У меня есть встреча позже, чтобы попытаться убедить их, чтобы я мог использовать LINQ вместо этого. Так что я просто передаю этот запрос LINQ в качестве параметра функции «return PartialView»? – doodles

+0

Да, (где 'fromDate' и' toDate' являются параметрами вашего метода (значения текстовых полей). Но тот факт, что ваш возвращаемый 'PartialView' также предлагает вам использовать ajax. Но если вы хотите сделать это с помощью SP , см. [этот ответ] (http://stackoverflow.com/questions/20901419/how-to-call-stored-procedure-in-entity-framework-6-code-first) для примера –

ответ

0

Вы можете использовать свойство Database и вызвать хранимую процедуру, используя 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(); 
Смежные вопросы