Чтобы донести свою мысль, я должен описать всю картину, поэтому, пожалуйста, потерпите меня немного. Вот три объекта, которые связаны друг с другом соответствующими навигационными свойствами. 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; }
}