首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在$levels内核oData .Net中启用.Net

如何在$levels内核oData .Net中启用.Net
EN

Stack Overflow用户
提问于 2020-07-19 09:08:42
回答 1查看 521关注 0票数 2

我已经开发了一个带有oData内核3.1的.Net服务器。

Asp.net在其旧版本中支持$levels,例如,检查这里

在我的服务器中,我可以将查询扩展到两个级别。它意味着一个URL,如下所示:

代码语言:javascript
复制
https://localhost:44375/odata.svc/Patients?$expand=PatientForms($expand=Form)

在我的服务器上工作,我可以看到扩展的结果。现在,如果我尝试用$levels来执行它

代码语言:javascript
复制
https://localhost:44375/odata.svc/Patients?$expand=PatientForms($levels=2)

然后,我将得到以下错误:

URI中指定的查询无效。导航属性‘$level’上的$level选项是不允许的,因为相关实体类型'mjzsoft.Models.PatientForm‘不能转换为源实体类型'mjzsoft.Models.Patient’。

但是,PatientPatientFormForm的控制器是如下所示,因为它们具有完全相同的结构,具有不同的模型名称,因此,我只是在这里反映了其中一个:

代码语言:javascript
复制
[ODataRoutePrefix("Patients")]
    public class PatientsController : ODataController
    {
        private readonly XxxDbContext xxxDbContext;
        public PatientsController(XxxDbContext xxxDbContext)
                => this.xxxDbContext = xxxDbContext;
        
        [ODataRoute]
        [EnableQuery]
        //[PagingValidatorQuery]
        public IActionResult Get()
        {
            return Ok(this.xxxDbContext.Patients);
        }

        [ODataRoute("{id}")]
        [EnableQuery]
        public IActionResult Get([FromODataUri] ulong id)
        {
            return Ok(this.xxxDbContext.Patients.FirstOrDefault(item => item.Id == id));
        }

    }

在数据库中,每个Patient可以有几个Form。因此,由于这是一个M到N的关系,我们之间有PatientForms

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-29 06:36:46

URI中指定的查询无效。导航属性‘$level’上的$level选项是不允许的,因为相关实体类型'mjzsoft.Models.PatientForm‘不能转换为源实体类型'mjzsoft.Models.Patient’。

我用你的密码遇到了这个问题。从您发布的链接中可以看出,$levels只用于展开相同的对象

代码语言:javascript
复制
$expand=Manager($levels=max) will be the same as $expand=Manager($expand=Manager)   
$expand=Manager($levels=3) will be the same as $expand=Manager($expand=Manager($expand=Manager))

至于你的案子,你需要$expand=PatientForms($expand=Paitent)

$expand=PatientForms($levels=2)希望扩展PatientForms,但是Paitent和强制转换错误出现了。

下面是使用$levels的测试结果。

评论=> $expand一次

Comments => $expand twiceComments => $levels=2相同

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62978300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档