2012-08-09 3 views
2

Я пытаюсь решить эту проблему и прочитал содержимое этой ошибки, но не смог найти решение. Я создаю приложение winforms, используя структуру Entity для простого сценария категорий продуктов. Вот снимок моей модели. EdmxУзел ObjectContext удален - Winforms Entity Framework

Код в классе ProductService, который извлекает все продукты является

public static List<Product> GetAllProducts() 
{ 
    List<Product> products = new List<Product>(); 
    using (var entity = new SUIMSEntities1()) 
    { 
     products = (from p in entity.Products 
        select p).ToList(); 
     return products; 
    }    
} 

код в код продуктов за это

List<Product> prods=ProductServices.GetAllProducts(); 
dgvProducts.DataSource = prods; 

При попытке загрузить продукты в DataGridView, следующие ошибка: enter image description here

Не могли бы вы ответить скажите мне, что вызывает проблему?

Edit: В поле Включить сделали трюк и в данном конкретном случае я изменил GetAllProducts(), как показано ниже

 public static List<Product> GetAllProducts() 
     { 
      using (var entity = new SUIMSEntities1()) 
      { 
       List<Product> products = entity.Products.Include("Category").ToList(); 
       return products;     
      }    
     } 
+2

В SO принято размещать код и сообщения об ошибках в виде текста, а не screengrabs текста. – spender

ответ

4

По умолчанию инфраструктура сущности (EF) будет ленить загружать ваш объект категории. Поскольку ваш набор объектов категории lazy загружен, когда какой-либо другой код позже ссылается на категорию, EF попытается загрузить набор. Однако на данный момент ваш контекст был удален, в результате чего вы видите ошибку.

Что вам нужно сделать, это заставить контекст охотно загружать ваше Категория множество сущностей, как так:

public static List<Product> GetAllProducts() 
{ 
    List<Product> products = new List<Product>(); 
    using (var entity = new SUIMSEntities1()) 
    { 
     entity.Include("Category"); //force eager loading of Category 
     products = (from p in entity.Products 
        select p).ToList(); 
     return products; 
    }    
} 
+0

Не могли бы вы отредактировать свой ответ, чтобы показать, что вы описываете? Покажите, где именно использовать .Include. –

+0

Я добавил некоторые пояснения к моему ответу. – Maciej

2

Хотя вы возвращаете List<Product>, казалось бы, что доступ к Категории причинит доступ к базе данных. Проблема в том, что вы уже выбрали контекст, необходимый для доступа к базе данных.

Смежные вопросы