我从带有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。