Ошибка получения данных внешнего ключа для объекта

#asp.net-mvc #entity-framework-4 #linq-to-entities

#asp.net-mvc #entity-framework-4 #linq-to-entities

Вопрос:

Я новичок в MVC2 и Entity Framework, и я попытался получить список продуктов с соответствующим названием категории, но он вернул мне ошибку

«Ссылка на объект не установлена для экземпляра объекта».

У меня есть таблица Product с внешним ключом Category .

Я использую MVC2 и Entity Framework 4.0.

 public class Repository 
{       
        public IQueryable<Produto> ListAllProducts()
        {
            return entities.Produtos;
        } 
}

public class AdminProdutoController : Controller  
{   

    TudoDeMassinhaRepository repository = new TudoDeMassinhaRepository();    

    public ActionResult Index()     
    {       
          var produtos = repository.ListAllProducts().ToList();
          return View(produtos);    
    }  
}
  

видимый код, в котором генерируется ошибка: <%: item.CatProduto.cat_produto_nome%>

Ответ №1:

Вы выбираете только продукты — в настоящее время вы не включаете категории. Это означает: вы получите обратно свои объекты продукта, но любые связанные объекты, на которые они ссылаются, не загружаются автоматически — вот почему .CatProduto свойство будет равно NULL, и, следовательно, вы получаете ошибку.

Вам нужно явно указать, какие дополнительные объекты вы хотите загрузить — что-то вроде:

 public IQueryable<Produto> ListAllProductsWithCategories()
{
        return entities.Produtos.Include("CatProduto");
} 
  

Таким образом, вы должны вернуть свои Produto объекты, и их CatProduto свойство также должно быть загружено и заполнено.

Итак, если вы измените свой индексный метод на:

 public ActionResult Index()     
{       
      var produtos = repository.ListAllProductsWithCategories().ToList();
      return View(produtos);    
}  
  

это должно сработать.

Комментарии:

1. Привет, marc_s спасибо за ваш ответ, но я все еще получаю то же сообщение. Есть идеи??????

2. Привет, @marc_s Я решил проблему, был в базе данных. В базе данных были поврежденные данные, и был продукт с id_category, которого не было в таблице категорий. Большое спасибо.