2017-08-30 19 views
0

私は以下のようである練習のためのシンプルなAPIを構築しています:マイクロソフトEntity FrameworkのASP NETCore API関連データ

public class Student 
    { 
     public int ID { get; set; } 
     public string LastName { get; set; } 
     public string FirstMidName { get; set; } 
     public DateTime EnrollmentDate { get; set; } 

     public ICollection<Enrollment> Enrollments { get; set; } 
    } 

namespace.Models.School 
{ 
public enum Grade 
{ 
    A, B, C, D, F 
} 
public class Enrollment 
{ 
    public int EnrollmentID { get; set; } 
    public int CourseID { get; set; } 
    public int StudentID { get; set; } 
    public Grade? Grade { get; set; } 

    public Course Course { get; set; } 
    public Student Student { get; set; } 
} 
} 

public class Course 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int CourseID { get; set; } 
    public string Title { get; set; } 
    public int Credits { get; set; } 

    public ICollection<Enrollment> Enrollments { get; set; } 
} 

マイDbContextのようなものです:

は、入学とコースのモデルは、このように学生である私この:

public DbSet<Course> Courses { get; set; } 
    public DbSet<Enrollment> Enrollments { get; set; } 
    public DbSet<Student> Students { get; set; } 

私はこのような私のコントローラ内の2つのメソッドを持っています

36:1 GET http://localhost:49170/api/students/36 net::ERR_CONNECTION_RESET 
:それは継続的にChromeで、コンソールでこのエラーをロード中に

は今GetAllStudetsは()関数は正常に動作し、単一の学生の結果を持ち帰っChromeとポストマン、GetSingleStudent()内のすべての学生をもたらしますポストマンで

は単に言う:

Could not get any response 
There was an error connecting to http://localhost:49170/api/students/36 

私の質問は、どのように私はこのエラーを取り除くと、このAPIを改善することができますか?

答えて

1

私の学生テーブルには登録コレクションがあり、登録されていることがわかりました。コースと内部コースがあります。もう登録しました。 それは自己参照ループを引き起こしていました。これを回避するために、私は私のStudentResourceが私のドメインモデルと同一である。このように見えるように、ドメインモデルの上にリソースクラスを作成する必要がありました:

public class StudentResource 
{ 
    public int ID { get; set; } 
    public string LastName { get; set; } 
    public string FirstMidName { get; set; } 
    public DateTime EnrollmentDate { get; set; } 

    public ICollection<EnrollmentResource> Enrollments { get; set; } 
} 

しかし、私は参照を含めることはできませんEnrollmentResourceクラスを変更しなければなりませんでした生徒とコースに戻る。私MappingProfile.csクラスで

public class EnrollmentResource 
{ 
    public int EnrollmentID { get; set; } 
    public int CourseID { get; set; } 

    public Grade? Grade { get; set; } 

} 

私はこのようにそれらをマッピングされた:

return Ok(_mapper.Map<Student, StudentResource>(singleStudent)); 

 CreateMap<Student, StudentResource>(); 
     CreateMap<Enrollment, EnrollmentResource>(); 

は最後に、私は以下のようなGetSingleStudent(int型のID)メソッドタイプのリターンを変更しなければなりませんでした

エラーが表示されなくなりました。

関連する問題