Хранимая процедура вывода нескольких таблиц с LINQ и ASP.NET MVC - PullRequest
2 голосов
/ 21 апреля 2009

Довольно часто наши системы вызывают хранимые процедуры, которые выводят результаты из нескольких таблиц. Ранее мы использовали выходные данные XML, чтобы получить каждую таблицу и правильно связать их с помощью XSLT. Если бы я использовал ASP.NET MVC с LINQ, вызывающим хранимую процедуру, как мне получить каждую из таблиц и затем вывести данные по мере необходимости?

Ответы [ 2 ]

3 голосов
/ 23 апреля 2009

эта статья здесь все объясняет. Это та же статья, на которую я ссылался, в вашем предыдущем SO вопросе .

3 голосов
/ 21 апреля 2009

Здесь есть статья о LINQ to SQL и хранимых процедурах, особенно в разделе «Обработка нескольких форм результатов из SPROC»: LINQ to SQL - получение данных с использованием хранимых процедур .

Это полезно в вашем случае?

В противном случае, не используя LINQ to SQL, возможно, используйте SqlDataReader NextResult для просмотра результатов, например:

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

Редактировать: пример того, как обрабатывать пользовательские комбинации данных, которые нелегко вписываются в объекты модели предметной области; в этом случае получение заказов вместе с клиентами для заказов:

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

Вдохновение для этого: в главе о NerdDinner Скотт Гатри рассказывает о создании пользовательских объектов ViewModel для хранения данных, например, из объединений, которые нелегко вписываются в домен модельные объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...