如何在Odata中先扩展子实体然后再扩展父实体

时间:2019-01-17 13:17:55

标签: c# asp.net-mvc asp.net-web-api odata

我有2个实体,学生和课程如下。

public class Student
{
    [Key]
    public int Student_Id{ get; set; }

    [StringLength(100)]
    public string FirstName { get; set; }

    [StringLength(100)]
    public string LastName { get; set; }

    [StringLength(1)]
    public string Gender { get; set; }

     public ICollection<Course> courses{ get; set; }
   }

public class Courses
{
    [Key]
    public int Course_Id{ get; set; }

    public int Student_Id{ get; set; }

    [StringLength(100)]
    public string CourseName{ get; set; }

    [StringLength(10)]
    public string Duration { get; set; }

   }

以下$ expand可以正常工作。

http://localhost:61565/Odata/Student?$select=Student_Id,FirstName &$expand=Courses($select=Course_Id,CourseName)

无论如何,我可以先扩展儿童实体“课程”,然后扩展父“学生” $ 即使我添加以下代码

   public ICollection<Student> Students{ get; set; }

参加课程。使用$ expand选项时会抛出错误。

有什么办法可以在父实体集和子实体集上双向设置导航属性,或以其他任何方式来处理它?<​​/ p>

2 个答案:

答案 0 :(得分:0)

您很对,课程类应该包含学生的ICollection。 我认为网址应该是这样的:

http://localhost:61565/Odata/Student
    ?$select=Student_Id,FirstName
    &$expand=Courses(
        $select=Course_Id,CourseName;
        $expand=Students(
            $select=Student_Id,FirstName))

以下是实时OData端点上的示例:

https://demos.telerik.com/kendo-ui/service-v4/odata/Categories
    ?$top=20
    &$select=CategoryName
    &$expand=Products(
        $select=ProductName,Category;
        $expand=Category(
            $select=CategoryName))

您遇到什么错误?

答案 1 :(得分:0)

要双向访问,请在以下课程中为Student_id添加ForiegnKey。

  public class Courses
{
 [Key]
public int Course_Id{ get; set; }
 [ForeignKey("Student")]
public int Student_Id{ get; set; }

 [StringLength(100)]
public string CourseName{ get; set; }

 [StringLength(10)]
public string Duration { get; set; }

public virtual Student Student{ get; set;}

}