0

J'ai actuellement un contrôleur qui remplit une vue partielle avec toutes les lignes d'une vue de base de données.Comment puis-je appeler une procédure strate de base de données 'select' avec des paramètres, à partir d'un contrôleur MVC?

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

TRANSACTION_HISTORY est le nom de la classe du modèle. et aussi la vue de la base de données à partir de laquelle j'affiche les lignes. db est mon objet de contexte de base de données.

Ceci est ma classe de modèle:

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; } 
    } 
} 

Maintenant, j'ai une procédure stockée qui fonctionne sur ce point de vue, le nom TRANSACTION_HISTORY_SEARCH. Maintenant, cela accepte 2 paramètres (FROM_DATE et TO_DATE) dans sa clause where, et renvoie exactement le même nombre de lignes que la vue (ce qui signifie que je ne veux pas utiliser un modèle différent pour stocker les lignes retournées par la procédure stockée).

Alors, comment utiliser la méthode ActionResult du contrôleur pour obtenir les résultats renvoyés par la procédure stockée, plutôt que toutes les lignes renvoyées par la vue de la base de données?

Je comprends que j'ai besoin d'utiliser [HttpPost] pour cette action, puisque je vais transmettre ces paramètres pour la procédure stockée de ma vue (entrées de zone de texte).

+0

(1) Vous n'avez pas besoin d'un POST (il peut être un GET puisque vos données ne changeant pas). (2) Pourquoi pas une simple clause linq '.Where()' par exemple. 'db.TRANSACTION_HISTORY.Where (x => FROM_DATE> = à partir deDate && x => x.TO_DATE <= toDate);'? –

+0

Merci. C'est juste que je travaille sur des bases de données existantes, qui ont déjà des procédures stockées et mes employeurs préfèrent que je les utilise. J'ai une réunion plus tard pour essayer de les convaincre de me permettre d'utiliser LINQ à la place. Alors est-ce que je viens de passer cette requête LINQ en tant que paramètre à la fonction 'return PartialView'? – doodles

+0

Oui, (où 'fromDate' et' toDate' sont des paramètres dans votre méthode (les valeurs des zones de texte) .Mais le fait que votre retour 'PartialView' vous suggère également d'utiliser ajax.Mais si vous voulez faire cela en utilisant un SP , référez-vous [cette réponse] (http://stackoverflow.com/questions/20901419/how-to-call-stored-procedure-in-entity-framework-6-code-first) pour un exemple –

Répondre

0

Vous pouvez utiliser la propriété Database et appeler la procédure stockée à l'aide de SqlQuery.
Quelque chose comme ceci:

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();