C# 如何在ASP.NET Core中的OData中导航/配置从复杂类型到实体类型的导航?
标题基本上是我的问题,比如说我有这样的课程C# 如何在ASP.NET Core中的OData中导航/配置从复杂类型到实体类型的导航?,c#,asp.net-core,odata,asp.net-core-3.1,C#,Asp.net Core,Odata,Asp.net Core 3.1,标题基本上是我的问题,比如说我有这样的课程 公共类ContrivedComplexClass { 公共字符串stringy{get;set;} 公共ContractEntityClass ContractEntityClass{get;set;} } 公共类contriveEntityClass { 公共Guid Id{get;set;} 公共int inty{get;set;} } 我的控制器动作如下 [HttpGet] [ODataRoute(“GetContrrivedComplexCl
公共类ContrivedComplexClass
{
公共字符串stringy{get;set;}
公共ContractEntityClass ContractEntityClass{get;set;}
}
公共类contriveEntityClass
{
公共Guid Id{get;set;}
公共int inty{get;set;}
}
我的控制器动作如下
[HttpGet]
[ODataRoute(“GetContrrivedComplexClass()”)]
公共异步虚拟任务GetControlvedComplexClass()
{
等待任务。延迟(10);
ContrivedComplexClass ContrivedComplexClass=新ContrivedComplexClass(){stringy=“asdf”,ContrivedEntityClass=新ContrivedEntityClass(){Id=Guid.NewGuid(),inty=3};
返回设计的ComplexClass;
}
我的edm模型是这样配置的
var builder = new ODataConventionModelBuilder(serviceProvider);
builder.EntitySet<ContrivedEntityClass>("ContrivedEntityClass").EntityType.HasKey(f => f.Id);
builder.Function("GetContrivedComplexClass").Returns<ContrivedComplexClass>();
它只返回复杂类型的属性,如
{"@odata.context":"https://localhost:5001/odata/$metadata#WebPortal.ContrivedComplexClass","stringy":"asdf"}
有人知道我应该如何查询或配置它吗?将您的EDM模型配置为:
private static IEdmModel GetEdmModel()
{
var builder = new ODataConventionModelBuilder();
builder.EntitySet<ContrivedEntityClass>("ContrivedEntityClass").EntityType.HasKey(f => f.Id); ;
var function = builder.Function("GetContrivedComplexClass");
function.ReturnsFromEntitySet<ContrivedComplexClass>("GetContrivedComplexClass");
return builder.GetEdmModel();
}
a使用URL:
https://localhost:5001/odata/GetContrivedComplexClass()?$Expand=ContrivedEntityClass
控制器:
[HttpGet]
[ODataRoute("GetContrivedComplexClass()")]
public async virtual Task<ContrivedComplexClass> GetContrivedComplexClass()
{
await Task.Delay(3);
ContrivedComplexClass contrivedComplexClass = new ContrivedComplexClass
{
Id = 1,
stringy = "asdf",
ContrivedEntityClass = new ContrivedEntityClass()
{
Id = Guid.NewGuid(),
inty = 3
}
};
return contrivedComplexClass;
}
[HttpGet]
[ODataRoute(“GetContrrivedComplexClass()”)]
公共异步虚拟任务GetControlvedComplexClass()
{
等待任务。延迟(3);
ContrivedComplexClass ContrivedComplexClass=新ContrivedComplexClass
{
Id=1,
stringy=“asdf”,
contriveEntityClass=新contriveEntityClass()
{
Id=Guid.NewGuid(),
inty=3
}
};
返回设计的ComplexClass;
}
结果:
谢谢!我想尝试在复杂类型上添加Id,但没有想到从集合部分返回。
https://localhost:5001/odata/GetContrivedComplexClass()?$Expand=ContrivedEntityClass
[HttpGet]
[ODataRoute("GetContrivedComplexClass()")]
public async virtual Task<ContrivedComplexClass> GetContrivedComplexClass()
{
await Task.Delay(3);
ContrivedComplexClass contrivedComplexClass = new ContrivedComplexClass
{
Id = 1,
stringy = "asdf",
ContrivedEntityClass = new ContrivedEntityClass()
{
Id = Guid.NewGuid(),
inty = 3
}
};
return contrivedComplexClass;
}