实体框架 - 有条件地包括相关实体

 王立君淑霖_189 发布于 2023-02-11 17:01

我维护一个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;
}

这将导致难以维护的代码,但是,我意识到如果需要我可以生成代码.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有