2011-10-13 6 views
4

Im, nouveau dans ASP MVC et je ne sais pas comment créer des modèles qui reposent sur des procédures stockées à partir de mon db. J'ai déjà la base de données qui fonctionne avec une autre application, et ma page Web doit utiliser db mentionné.ASP .NET MVC 3 modèles + procédures stockées

Je serais reconnaissant si quelqu'un peut me montrer un morceau de code décrivant la bonne façon de le faire. (si je n'étais pas clair: je dois créer ASP .NET modèles qui utilisent des procédures stockées de ma base de données et rien de plus)

txh à l'avance

Répondre

5

@fgeorgiew avez-vous juste besoin de savoir comment remplir un modèle (classe) à partir d'une procédure stockée? Vous pouvez utiliser un ORM comme NHibernate ou Entity Framework pour gérer la plomberie pour vous, ou simplement utiliser du code ADO.NET brut, comme dans l'exemple ci-dessous. Notez, ceci est juste du code approximatif, mais vous avez l'idée.

public class MyModel 
{ 
    public int ModelId { get; set; } 
    public string FirstName { get; set; } 
} 

public class SqlMyModelRespoitory : IMyModelRepository // optional for DI/IoC, assume interface with GetSingleModel method 
{ 
    public MyModel GetSingleModel() 
    { 
     MyModel model; 
     string connString = "server=10.1.1.1;database=MyDb;uid=me;pwd=hidden"; 
     using (SqlConnection conn = new SqlConnection(connString)) 
     { 
      conn.Open(); 
      using (SqlCommand cmd = new SqlCommand()) 
      { 
       cmd.Connection = conn; 
       cmd.CommandType = System.Data.CommandType.StoredProcedure; 
       cmd.CommandText = "p_GetMyModelFromDb"; 

       using (SqlDataReader reader = cmd.ExecuteReader()) 
       { 
        while (reader.Read()) 
        { 
         model = new MyModel 
         { 
          ModelId = Convert.ToInt32(reader[0]), 
          FirstName = reader[1].ToString() 
         }; 
        } 
       } 
      } 
     } 
     return model; 
    } 
} 
+0

c'est exactement ce dont j'avais besoin, merci! :) Btw Darin Dimitrov answear c'est plutôt bien mais je ne connais pas DI (je crois que c'est l'injection de dépendances). – fgeorgiew

+0

Et si je veux obtenir tous les objets? –

3

Vous pouvez commencer par une abstraction indiquant votre intention:

public interface IMyRepository 
{ 
    SomeModel Get(int id); 
} 

alors vous pourriez écrire une implémentation qui utilisera votre procédure stockée:

public class MyRepositorySql: IMyRepository 
{ 
    public SomeModel Get(int id) 
    { 
     ... call your stored procedure 
    } 
} 

puis concevoir votre contrôleur afin qu'il faut cette abstraction comme argument:

public class MyController: Controller 
{ 
    private readonly IMyRepository _repository; 
    public MyController(IMyRepository repository) 
    { 
     _repository = repository; 
    } 

    public ActionResult Index(int id) 
    { 
     var model = _repository.Get(id); 
     return View(model); 
    } 
} 

Maintenant, tout ce qui reste est de configurer votre cadre de DI pour passer la bonne application dans le constructeur du contrôleur. Comme vous pouvez le voir, le contrôleur est complètement découplé de la façon dont les données sont récupérées. Peu importe que vous utilisiez StoredProcs, un ORM ou autre dans votre couche d'accès aux données.

+0

Tu me laissé derrière avec 1 sec. –

+0

thx :) Je pense que je comprends. maintenant il est temps de mettre en œuvre cela et voir les résultats – fgeorgiew

0

Ok, permet de dire que vous avez un SP appelé Les clients qui consiste à sélectionner des colonnes comme:

ID
Nom
Adresse

Maintenant, vous allez créer une classe de modèle dans votre Modèle de dossier appelé "Customer.cs" et définissez les propriétés comme:

public int ID { get; set; } 
public string Name { get; set; } 
public string Address { get; set; } 

Ceci est votre classe MODEL.

+0

thx 4 réponse, mais je pense que vous ne me comprenez pas correctement :) Je sais quel modèle est de RoR ou Php etc et le problème ne concerne pas la cartographie C# Model Class à Db table mais problème est sur la façon de le faire en utilisant des procédures stockées à partir de ma base de données et ADO .NET. (à propos de la dernière im je ne suis pas sûr) :) – fgeorgiew

+0

Got it. J'ai mal interprété votre question ... –

1

Comment appeler la procédure stockée dans Asp.Net MVC

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Data; 
using System.Data.Entity; 
using System.Net; 
using System.Data.SqlClient; 

public partial class StudentRecord 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Marks { get; set; } 
    public string Grade { get; set; } 
    public Nullable<System.DateTime> DOB { get; set; } 
} 

public class SqlMyModelRespoitory : First_Test_DBEntities 
{ 
    public StudentRecord GetSingleModel() 
    { 
     StudentRecord model; 
     string connString = @"Paste Your Local Connection String"; 

     using (SqlConnection conn = new SqlConnection(connString)) 
     { 
      conn.Open(); 

      using (SqlCommand cmd = new SqlCommand()) 
      { 
       cmd.Connection = conn; 
       cmd.CommandType = System.Data.CommandType.StoredProcedure; 
       cmd.CommandText = "InsertStudent"; 

       using (SqlDataReader reader = cmd.ExecuteReader()) 
       { 
        while (reader.Read()) 
        { 
         model = new StudentRecord 
         { 
          Id = Convert.ToInt32(reader[0]), 
          Name = reader[1].ToString(), 
          Marks = reader[1].ToString(), 
          Grade = reader[1].ToString(), 
          DOB = Convert.ToDateTime(reader[1]) 
         }; 
        } 
       } 
      } 
     } 
     return model; 
    } 
} 
Questions connexes