2009-04-21 7 views
2

Très souvent, nos systèmes appellent des procédures stockées qui génèrent plusieurs tables valant des résultats. Auparavant, nous utilisions des sorties XML pour obtenir chaque table et les lier correctement en utilisant XSLT. Si j'utilisais ASP.NET MVC avec LINQ appelant une procédure stockée, comment puis-je obtenir chacune des tables, puis générer les données si nécessaire?Sortie de plusieurs tables de procédure stockée avec LINQ et ASP.NET MVC

+0

Pouvez-vous élaborer un peu plus sur votre question, Voulez-vous afficher ces données de la procédure stockée sur une page Web? –

+0

Ouais, j'essaye de produire trois tables séparées valant des données sur une seule page Web en utilisant LINQ. – Kezzer

+0

Kezzer - vous devriez également demander la réponse dans VB.NET et ajouter cette étiquette, parce que je sais que vous êtes dans le monde VB et que vous avez du mal à traduire C# en VB.NET. –

Répondre

3

this article here explique tout. C'est le même article que j'ai lié, dans votre previous SO question.

+0

J'ai marqué celui-ci comme étant juste parce que j'avais posé une nouvelle question dans une autre question et que vous y aviez passé beaucoup de temps. À votre santé. – Kezzer

3

Il existe un article sur LINQ to SQL et les procédures stockées, en particulier la section 'Gestion des formes de résultats multiples à partir de SPROC': LINQ to SQL - Retrieving Data Using Stored Procedures.

Est-ce utile dans votre cas?

Sinon, ne pas utiliser LINQ to SQL, peut-être utiliser SqlDataReader « s NextResult passer par les résultats, par exemple:

IList<Employee> employees = new List<Employee>(); 
IList<Customer> customers = new List<Customer>(); 
using (SqlConnection connection = new SqlConnection 
    (Properties.Settings.Default.NorthwindConnectionString)) 
using (SqlCommand command = new SqlCommand 
    ("GetEmployeesAndCustomers", connection)) 
{ 
    command.CommandType = CommandType.StoredProcedure; 
    connection.Open(); 
    using (SqlDataReader reader = command.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
      Employee e = new Employee{EmployeeID = (int)reader["EmployeeID"]}; 
      employees.Add(e); 
     } 
     reader.NextResult(); 
     while (reader.Read()) 
     { 
      Customer c = new Customer{CustomerID = (string)reader["CustomerID"]}; 
      customers.Add(c); 
     } 
    } 
} 

Edit: Exemple de la façon de traiter des combinaisons de données personnalisées qui ne sont pas s'intègre facilement dans les objets du modèle de domaine; dans ce cas, la récupération des commandes ainsi que les clients pour les commandes:

namespace Company.Application.ViewModel 
{ 
    public class CustomerOrder 
    { 
     public string CustomerID { get; set; } 
     public string CustomerName { get; set; } 
     public int OrderID { get; set; } 
     public DateTime? OrderDate { get; set; } 
    } 
} 
namespace Company.Application.Repository 
{ 
    public class CustomerOrderRepository 
    { 
     public IList<CustomerOrder> GetCustomerOrders() 
     { 
      NorthwindDataContext db = new NorthwindDataContext(); 
      var custorders = from customer in db.Customers 
          join order in db.Orders 
          on customer.CustomerID equals order.CustomerID 
          select new CustomerOrder 
          { 
           CustomerID = customer.CustomerID, 
           CustomerName = customer.CompanyName, 
           OrderID = order.OrderID, 
           OrderDate = order.OrderDate 
          }; 
      return custorders.ToList(); 
     } 
    } 
} 

Inspiration pour cela: Dans le chapter à propos NerdDinner, Scott Guthrie parle de la création d'objets « ViewModel » habitude de conserver des données à partir par exemple jointures qui ne sont pas s'intègre facilement dans les objets du modèle de domaine.

+0

J'avais lu cet article, mais il n'explique pas comment ramener plusieurs ensembles de résultats dans une procédure stockée en utilisant LINQ. En outre, il n'explique même pas comment utiliser LINQ lors de la récupération de jeux de données personnalisés, c'est-à-dire des sous-ensembles ou des combinaisons de tables à partir de requêtes utilisant JOINs. Je n'ai pas encore essayé votre exemple cependant. – Kezzer

+0

Concernant la récupération des ensembles de données personnalisés, dans le chapitre ici (http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf) à propos de Nerddinner (http://weblogs.asp.net/scottgu/archive/2009) /03/10/free-asp-net-mvc-ebook-tutorial.aspx), Scott Guthrie parle de créer des objets 'ViewModel' personnalisés pour contenir des données de par exemple des jointures qui ne rentrent pas facilement dans les objets du modèle de domaine (je vais donne un exemple dans la réponse éditée ci-dessus) –

+0

Super, merci beaucoup! – Kezzer

Questions connexes