【发布时间】:2016-12-13 10:29:48
【问题描述】:
假设我的一个控制器中有这样的方法:
[Route("api/Products")]
public IQueryable<Product> GetProducts() {
return db.Products
.Include(p => p.Category);
}
使用它,我可以从数据库中获取产品并包含其 Category 属性。
在我的 CategoryController 我有这个方法:
[Route("api/Categories")]
public IQueryable<Category> GetCategories() {
return db.Categories
.Include(c => c.Parent)
.Include(c => c.Products)
.Include(c => c.SubCategories);
}
当我向 CategoryController 发送一个 GET 请求时,它按预期工作,我得到了类别、它的父类别、它的产品和它的子类别。但是当我向 ProductController 发送 GET 请求时,我不想将所有产品都包含在所请求产品的类别中,我只需要有关该类别的基本信息。
那么,如何让 GetProducts() 返回数据库中的产品,包括每个产品的 Category 属性,但不包括该类别的 Products list 属性,仍然保留 id、title 等其他属性?
谢谢。
【问题讨论】:
-
这看起来更像是 LINQ-to-SQL 或实体框架问题,而不是 ASP.NET 问题。请修改标签并为您实际使用的 ORM 添加标签。
-
@Heinzi 好电话,更新了标签。
-
你能关闭延迟加载并使用急切加载吗?
-
@Michael 可能,但我宁愿不要。如果没有其他解决方案出现,我会记住这一点作为替代方案。编辑:等等,我很确定我已经在使用急切加载?
-
请记住,当您的
IQueryable<Product>被序列化时,它将被迭代,并且所有属性都将被“触及”。如果您开启了延迟加载,您将为所有关系属性(外键)调用数据库。
标签: c# entity-framework asp.net-web-api2