获取实体上的外键数据时出错

时间:2011-10-08 14:39:39

标签: asp.net-mvc entity-framework-4 linq-to-entities

我是MVC2和实体框架的新手,我尝试获取具有相应类别名称的产品列表,但它返回了错误

  

“对象引用未设置为对象的实例。”

我有一张带有外键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 个答案:

答案 0 :(得分:2)

您只选择产品 - 您目前包括类别。这意味着:您将获得产品对象,但他们引用的任何相关对象都会自动加载 - 这就是.CatProduto属性为NULL的原因因此你得到了错误。

您需要明确指定要加载的其他实体 - 例如:

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

这样,你应该收回你的Produto个对象,并且他们的CatProduto属性也应该被加载和填充。

因此,如果您将索引方法更改为:

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

它应该有用。