Почему эти два свойства навигации в классе A перемещаются между собой 4 раза? - PullRequest
0 голосов
/ 11 марта 2019

Чтобы донести свою мысль, я должен описать всю картину, поэтому, пожалуйста, потерпите меня немного. Вот три объекта, которые связаны друг с другом соответствующими навигационными свойствами. Book.cs имеет AuthorId и CategoryId . Автор и Категория сущности имеют свойство типа List - List <<em> Book > с именем listBook. Внутри ActionResult я получаю автора в соответствии с id , передаваемым в качестве параметра, этот id затем включает книги для соответствующего автора посредством активной загрузки. В моей БД у каждого автора есть одна книга.

Когда я отлаживаю процесс, я вижу, что сначала для db.Authors EF обращается к базе данных, чтобы загрузить сущность. Второй "FirstOrDefault(a => a.Id == id)" выполняется и переносит меня в Author.cs , где свойство (Author) Id равно {set;} и все другие свойства в Author.cs начинаем возвращать значения с {get;} один за другим, когда мы переходим. Далее, для оператора "Include(a=>a.listBooks)" мы попадаем в Book.cs , где тот же {set;} , а затем {get;} процесс идет включен, но когда дело доходит до AuthorId , отладчик перемещается вверх и вниз между свойствами AuthorId и CategoryId 4 раза, что довольно странно. Я не могу отследить, что происходит в этой точке, несмотря на точки останова на соответствующих свойствах. Каковы эти 4 свойства или переменные, которым AuthorId и CategoryId возвращают свои значения? У вас есть идеи или есть какой-нибудь инструмент, который поможет мне отследить этот процесс?

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; }
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...