我已经开发了一个带有oData内核3.1的.Net服务器。
Asp.net在其旧版本中支持$levels,例如,检查这里。
在我的服务器中,我可以将查询扩展到两个级别。它意味着一个URL,如下所示:
https://localhost:44375/odata.svc/Patients?$expand=PatientForms($expand=Form)在我的服务器上工作,我可以看到扩展的结果。现在,如果我尝试用$levels来执行它
https://localhost:44375/odata.svc/Patients?$expand=PatientForms($levels=2)然后,我将得到以下错误:
URI中指定的查询无效。导航属性‘$level’上的$level选项是不允许的,因为相关实体类型'mjzsoft.Models.PatientForm‘不能转换为源实体类型'mjzsoft.Models.Patient’。
但是,Patient、PatientForm和Form的控制器是如下所示,因为它们具有完全相同的结构,具有不同的模型名称,因此,我只是在这里反映了其中一个:
[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。
发布于 2020-07-29 06:36:46
URI中指定的查询无效。导航属性‘$level’上的$level选项是不允许的,因为相关实体类型'mjzsoft.Models.PatientForm‘不能转换为源实体类型'mjzsoft.Models.Patient’。
我用你的密码遇到了这个问题。从您发布的链接中可以看出,$levels只用于展开相同的对象。
$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 twice与Comments => $levels=2相同


https://stackoverflow.com/questions/62978300
复制相似问题