要阐明我的观点,我必须描述整个图片,所以请多多包涵。这是三个具有各自导航属性的实体。 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; }
}