我有以下实体
//Active Auction Entity
public class ActiveAuction
{
public int Id { get; set; }
public string Title { get; set; }
public int? FirstAuctionId { get; set; }
public int? SecondAuctionId { get; set; }
public int? ThirdAuctionId { get; set; }
public virtual Auction FirstAuction { get; set; }
public virtual Auction SecondAuction { get; set; }
public virtual Auction ThirdAuction { get; set; }
}
// Auction Entity
public class Auction
{
public int AuctionId { get; set; }
public AuctionStatus AuctionStatus { get; set; }
public int? DepartmentId { get; set; }
public virtual Department Department { get; set; }
}
// Department Entity
public class Department
{
public int DepartmentId { get; set; }
public string DepartmentName { get; set; }
public int? AdminId { get; set; }
public virtual Admin Admin { get; set; }
}
我想要做的是获取已激活的拍卖,并加载相关的竞拍和部门信息。
我知道应该为每个需要加载的对象编写Include
语句,这样EF生成的SQL语句将包含联接语句来为我选择这些对象
但这是现有的代码:
using (var dc = DataContext())
{
await dc.Auction
.Include("Department.Admin")
.Where(i => i.Id == id && i.AuctionStatus == AuctionStatus.Accepted).ToListAsync();
return await dc.ActiveAuction.
SingleOrDefaultAsync(i => i.Id == id);
}
我不知道为什么这段代码能够运行,而返回的
ActiveAuctions
包含了所有所需的对象。我检查了对数据库执行的SQL语句,并且生成了两个独立的查询,正如预期的那样。
我想要一个解释,以便理解返回的
ActiveAcutions
是如何与其他提到的实体一起加载的!!?
Categories.Admin
是不是应该改成Department.Admin
?还是你为了缩短代码而从Auction
对象中删除了Categories
? - Johan.Include(a => a.Department.Admin)
)。这将避免拼写错误/包含不存在的对象。 - Johan