Об утилизации DataContext и DataBind () - PullRequest
1 голос
/ 08 августа 2011

Итак, если у меня есть какой-то метод для возврата списка продуктов:

    public IEnumerable<Product> List()
    {
        try
        {
            using (MyDataContext db = new MyDataContext ())
            {
                return db.Products.ToList();
            }
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message, ex);
        }
    }

Когда я устанавливаю, скажем, Repeater, чтобы иметь это как источник данных:

protected void LoadList()
{
     BusProducts products = new BusProducts();
     rptProducts.DataSource = products.List();
     rptProducts.DataBind();
 }

Я получаю сообщение об ошибке на DataBind(), в котором говорится, что я не могу получить доступ к удаленному объекту (MyDataContext) ..

Это правильно?Даже если я верну все с .ToList()?

1 Ответ

4 голосов
/ 08 августа 2011

Если вы ссылаетесь на какое-либо из свойств навигации сущностей Продукта (связанных родительских или дочерних сущностей) в результате привязки, то да, вы получите это исключение даже с ToList.Это связано с тем, что доступ к свойствам навигации потребует дополнительных запросов к базе данных во время доступа к свойству.Это не сработает, если был удален DataContext.

Этого можно избежать, загружая связанные данные при получении данных о продукте.Это достигается с помощью механизма предварительной выборки - DataContext.LoadOptions с использованием параметра LoadWith.

http://msdn.microsoft.com/en-us/library/Bb882681%28v=VS.90%29.aspx

...