我维护一个API,它基于请求返回人员列表的不同结果集。例如,一些API客户端想要获取人员列表以及他们的互动列表,而其他人则想要人员列表和他们的元数据列表。所有这些都可以在请求中指定给返回人员的API方法。
这似乎不起作用:
using (var dbcontext = new ExampleEntities())
{
var query = dbcontext.People.AsQueryable();
//determined in earlier application logic based on request
if(includeMetadata)
{
query = query.Include("metadata");
}
//determined in earlier application logic based on request
if(includeInteractions)
{
query = query.Include("interactions");
}
/* ...SNIP... */
}
我不想做的是:
var query = dbcontext.People.Include("Metadata").Include("interactions");
这意味着每个获取人员的请求都会包含其所有相关实体,即使请求的API客户端不需要它们。我也不想编写每种可能的逻辑组合。
if(includeMetadata && includeInteractions)
{
var query = dbcontext.People.Include("Metadata").Include("interactions");
}
else if(includeMetadata)
{
var query = dbcontext.People.Include("Metadata");
}
else if(includeInteractions)
{
var query = dbcontext.People.Include("Interactions");
}
else
{
var query = dbcontext.People;
}
这将导致难以维护的代码,但是我意识到如果需要的话,我可以进行代码生成。
Include
是 EF 的扩展方法(http://msdn.microsoft.com/en-us/library/gg696450%28v=vs.103%29.aspx),需要引用 EntityFramework.dll 程序集,并添加using System.Data.Entity;
,同时去掉AsQueryable()
。 - VahidN