为什么A类中的这两个导航属性彼此之间会随机播放4次?

时间:2019-03-11 08:52:23

标签: c# asp.net-mvc

要阐明我的观点,我必须描述整个图片,所以请多多包涵。这是三个具有各自导航属性的实体。 Book.cs具有 AuthorId CategoryId 作者类别实体具有列表类型的属性-列表<< em> Book >,名为listBook。在ActionResult内部,我根据作为参数传递的 id 检索作者,此 id 然后通过急切的加载为相应的Author启用书籍。在我的数据库中,每个作者都有一本书。

当我调试过程时,我首先看到db.Authors EF命中了数据库以加载实体。第二个"FirstOrDefault(a => a.Id == id)"被执行,并带我到 Author.cs ,其中(Author)Id属性为 {set;} ,而其他所有属性均位于 Author.cs 开始使用 {get;} 逐一返回值。接下来,对于"Include(a=>a.listBooks)"语句,我们进入 Book.cs ,其中相同的 {set;} 然后是 {get;} < / em>进程继续进行,但是当出现 AuthorId 时,调试器会在属性 AuthorId CategoryId 之间上下移动4次这很奇怪。尽管各个属性都有断点,但我无法跟踪此时发生的情况。 AuthorId和CategoryId返回其值的这4个属性或变量是什么?您有任何想法或工具可以帮助我跟踪该过程吗?

ActionMethod:

public ActionResult Authors(int? id)
        {   
                AuthorModel authModel = new AuthorModel();
                if (id != null)
                {    
                    var model = db.Authors.Include(a => a.Books).FirstOrDefault(a => a.Id == id);//eager loading

                    authModel.author = model;
                    if (authModel == null)
                    {
                        return HttpNotFound();
                    }
                    return View(authModel);
                }
                else
                {
                  -------
                }
          }

实体:

          public class Book
               {
                    public int Id { get; set; }

                    public string Name { get; set; }
                    public string Description { get; set; }

                    public double Price { get; set; }

                    public int Stock { get; set; }


                    public string ISBN { get; set; }

                    public bool IsApproved { get; set; }
                    public int DisplayNumber { get; set; }
                    public int SaleNumber { get; set; }

                    public int AuthorId { get; set; }
                    public Author Author { get; set; }

                    public int CategoryId { get; set; }
                    public Category Category { get; set; }
               }

            public class Author
                {
                    public int Id { get; set; }
                    public string Name { get; set; }
                    public string Description { get; set; }
                    public List<Book> listBooks { get; set; }
                }
            public class Category
                {
                    public int Id { get; set; }
                    public string Name { get; set; }
                    public string Description { get; set; }
                    public List<Book> listBooks { get; set; }
                }

0 个答案:

没有答案