![](/img/trans.png)
[英]ASP.NET Core OData Action with complex type having stream always returns null for the stream
[英]How do you navigate/configure navigation from complex type to entity type in OData in ASP.NET Core?
標題基本上說了我的問題,說我有這樣的課程
public class ContrivedComplexClass
{
public string stringy { get; set; }
public ContrivedEntityClass ContrivedEntityClass { get; set; }
}
public class ContrivedEntityClass
{
public Guid Id { get; set; }
public int inty { get; set; }
}
我的 controller 操作是這樣的
[HttpGet]
[ODataRoute("GetContrivedComplexClass()")]
public async virtual Task<ContrivedComplexClass> GetContrivedComplexClass()
{
await Task.Delay(10);
ContrivedComplexClass contrivedComplexClass = new ContrivedComplexClass() { stringy = "asdf", ContrivedEntityClass = new ContrivedEntityClass() { Id = Guid.NewGuid(), inty = 3 } };
return contrivedComplexClass;
}
我的 edm model 是這樣配置的
var builder = new ODataConventionModelBuilder(serviceProvider);
builder.EntitySet<ContrivedEntityClass>("ContrivedEntityClass").EntityType.HasKey(f => f.Id);
builder.Function("GetContrivedComplexClass").Returns<ContrivedComplexClass>();
當我從瀏覽器或 postman 或 URL 調用 function 時
https://localhost:5001/odata/GetContrivedComplexClass()?Expand=ContrivedEntityClass
它只返回復雜類型的屬性,例如
{"@odata.context":"https://localhost:5001/odata/$metadata#WebPortal.ContrivedComplexClass","stringy":"asdf"}
有人知道我應該如何查詢或配置它嗎?
將您的 EDM model 配置為:
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();
}
向 ContrivedComplexClass 添加一個鍵:
public class ContrivedComplexClass
{
[Key]
public int Id { get; set; }
public string stringy { get; set; }
public ContrivedEntityClass ContrivedEntityClass { get; set; }
}
public class ContrivedEntityClass
{
public Guid Id { get; set; }
public int inty { get; set; }
}
使用 URL:
https://localhost:5001/odata/GetContrivedComplexClass()?$Expand=ContrivedEntityClass
Controller:
[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;
}
結果:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.