【发布时间】:2013-12-11 05:52:55
【问题描述】:
我维护了一个 API,它根据对人员列表的请求,根据请求返回不同的结果集。例如,一些 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;
}
这将导致难以维护的代码,但是,我意识到如果需要我可以通过代码生成它。
【问题讨论】:
标签: c# entity-framework