Как сначала $ раскрыть дочернюю сущность, а затем родительскую сущность в Odata - PullRequest
0 голосов
/ 17 января 2019

У меня есть 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.

Можно ли каким-либо образом установить двунаправленные свойства навигации для родительских и дочерних наборов сущностей или каким-либо другим способом справиться с этим?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Чтобы получить доступ в двунаправленном режиме, добавьте ForiegnKey for Student_id в Courses, как показано ниже.

  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;}

}
0 голосов
/ 17 января 2019

Вы правы, что класс курса (ов) должен содержать ICollection of Student. Я думаю, что URL должен быть примерно таким:

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))

Какую ошибку вы получаете?

...