从数据库检索数据时出现Null引用异常

时间:2019-04-12 10:09:59

标签: c# asp.net-mvc

问题是,当我将鼠标悬停在db.Reviews.ToList();上以查看数据是否正确填充时,我会在框中看到红叉警告,然后在跳过空引用后立即抛出异常。这不会发生,如果我不检查里面的东西,一切都会很好。为什么会这样呢?我会以不正确的方式检索数据吗?

    private DataContext db;
    public HomeController()
    {
        db = new DataContext();
    }

    public ActionResult ProductView (int? id)
    {
        if (id != null)
        {
            var book = Details(id);
            book.reviews = db.Reviews.ToList();
            return View(book);
        }
        else
           return HttpNotFound();
    }

Details方法只是多个Action方法使用的一种桥接方法

public HomeModel Details(int? id)
        {
            HomeModel model = new HomeModel();
            var book = db.Books.Where(b => b.Id == id).Include(b => b.Author).Include(b=> b.Category.Books).FirstOrDefault();
            if (book == null)
            {
                HttpNotFound();
            }


            book.DisplayNumber++;
            db.SaveChanges();
            model.bookDetails = book;
            return model;
        }

HomeModel类是一个包装,其中包含要在View中使用的多个类:

public class HomeModel:ReviewModel
    {
        public List<BookModel> PopularBooks { get; set; }
        public List<BookModel> BestSales { get; set; }
         public List<Review> reviews { get; set; }
        public Book bookDetails { get; set; }

    }

发生异常的行:

Line 101:            {
Line 102:                var book = Details(id);
Line 103:                **book.reviews = db.Reviews.ToList();**
Line 104:                return View(book);
Line 105:            }

1 个答案:

答案 0 :(得分:1)

  

我是否以不正确的方式检索数据?

不!您的查询是非常简单的普通查询,您只是使用ToList()来获取评论列表。

  

为什么会这样?

您无法在运行时使用Visual Studio调试LINQ查询,这就是为什么当您将鼠标放在红色的东西上时会看到交叉的红色东西,这是因为您不能那样运行它们。

如果要查看评论列表,请将其放在变量中查看或将鼠标放在db.Reviews上,然后单击View results(不记得确切的内容)。< / p>