なぜか分らんけど動いた

SchoolContext.csのメソッドOnModelCreatingのコメントの行を書き直したら動くようになった。先日のエラーログから、ここがテーブル名になるのかなって感じでやってみた。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
  modelBuilder.Entity<Course>().ToTable("Course");
  modelBuilder.Entity<Enrollment>().ToTable("Enrollment");
  modelBuilder.Entity<Student>().ToTable("Person"); // modified
  modelBuilder.Entity<Department>().ToTable("Department");
  modelBuilder.Entity<Instructor>().ToTable("Person"); // modified
  modelBuilder.Entity<OfficeAssignment>().ToTable("OfficeAssignment");
  modelBuilder.Entity<CourseAssignment>().ToTable("CourseAssignment");
  modelBuilder.Entity<Person>().ToTable("Person");

  modelBuilder.Entity<CourseAssignment>()
      .HasKey(c => new { c.CourseID, c.InstructorID });
}

こうすると、たとえば Student/Index にアクセスしたときに走るSQLは以下だそうだ。

SELECT
  [p].[ID]
 ,[p].[Discriminator]
 ,[p].[FirstName]
 ,[p].[LastName]
 ,[p].[EnrollmentDate]
FROM
  [Person] AS [p]
WHERE
  [p].[Discriminator] = N'Student'
ORDER BY
  [p].[LastName]
OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY

なにがどうなってWHERE句がちゃんと追加されてるんだろう。Person、Student、InstractorどのエンティティにもDiscriminatorなんてプロパティ無いけどPersonテーブルにはカラムがあるぞ?Table-per-Hierarchy (TPH) 継承を実現する為に、こうなるようになってるのかな?

githubに何か書いてあったYO!!

github.com