簡體   English   中英

如何在 ASP.NET Core 的 OData 中導航/配置從復雜類型到實體類型的導航?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM