如何结合ASP.NET Core OData WebAPI设置实体数据模型之间的1:n关系

时间:2019-06-12 09:43:39

标签: c# asp.net-mvc asp.net-core odata

我从带有OData的ASP.NET Core Web API接收信息。

但是,如果我尝试从我的API(localhost:port / odata / groups)中获取信息,则它仅返回ID和GroupName。 OutputFields丢失。

我的模型的结构如下:

public class OutputGroup
{
    [Key]
    public int ID { get; set; }
    public string GroupName { get; set; }
    public List<OutputField> OutputField { get; set; }
}

public class OutputField
{
    public int ID { get; set; }
    public string FieldName { get; set; }
    public string value { get; set; }
    // Tryed to set a ForeignKey for the 1:n releationship
    public int GroupForeignKey { get; set; }
    [ForeignKey("GroupForeignKey")] 
    public OutputGroup OutputGroup { get; set; }
}

EDM是通过此方法创建的,在这里我尝试定义EntitySet之间的引用:

    private static IEdmModel GetEdmModel()
    {
        // create Builder Object                                                 
        ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
        // OutputGroup-EntitySet
        builder.EntitySet<OutputGroup>("Groups")
               .HasManyBinding(g => g.OutputField, "Fields");
        // OutputField-EntitySet
        builder.EntitySet<OutputField>("Fields");

        return builder.GetEdmModel();
    }

使用此代码,我定义了Outputgroup和OutputField实体之间的1:n关系:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<OutputGroup>()
                    .HasMany(g => g.OutputField)
                    .WithOne(f => f.OutputGroup)
                    .HasForeignKey("GroupForeignKey");
    }

我的控制器类按如下方式返回组(存在与此类似的OutputFields构建的第二个控制器):

    [ODataRoute("Groups")]
    [EnableQuery]
    public IActionResult Get()
    {
        return Ok(_db.Groups); // The values are all correct in this variable
    }

我知道我必须设置实体之间的关系,但是我不知道为什么这不起作用。

Odata元数据返回此xml

我的项目基于此tutorial

0 个答案:

没有答案