#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, которого не было в таблице категорий. Большое спасибо.