Я понимаю, что рекомендуется использовать блок using
при получении данных из классов LINQ-to-SQL, как показано ниже.
Однако, когда я это делаю, я могу получить доступ только к поверхностным свойствам orders
(например, Order.OrderId
), но не к более глубоким свойствам (например, Customer.CustomerName
), поскольку на этом этапе они, похоже, утилизируются.
Я могу удалить свой using
блок, который позволяет мне получить доступ к клиентам, но это не освобождает ресурсы.
Что здесь лучше всего?
using System;
using System.Collections.Generic;
using System.Linq;
using TestExtn2343.Models;
namespace TestExtn2343
{
class Program
{
public static void Main(string[] args)
{
var orders = GetOrders(10, 10);
orders.ForEach(x =>
{
Customer customer = x.Customer;
if (customer != null)
{
//SUCCEEDS:
Console.WriteLine("{0}, {1}", x.OrderID);
//FAILS: "
Console.WriteLine("{0}, {1}", x.OrderID, x.Customer.ContactName.ToString());
}
});
Console.ReadLine();
}
public static List<Order> GetOrders(int skip, int take)
{
using (MainDataContext db = new MainDataContext())
{
List<Order> orders = (from order in db.Orders
select order).Skip(skip).Take(take).ToList();
return orders;
}
}
}
}
Отвечать:
Спасибо, Адам, используя ваше предложение, я заставил свой код работать следующим образом:
public static void Main(string[] args)
{
using (MainDataContext db = new MainDataContext())
{
GetOrders(db, 10, 10).ForEach(x => Console.WriteLine("{0}, {1}", x.OrderID, x.Customer.ContactName.ToString()));
}
Console.ReadLine();
}
public static List<Order> GetOrders(MainDataContext db, int skip, int take)
{
List<Order> orders = (from order in db.Orders
select order).Skip(skip).Take(take).ToList();
return orders;
}