アプリケーションはデータを表示するためにテーブルをどのように区別しますか? リンクの例のように呼び出すreturn View(db.Students.ToList())
と、アプリケーションはどのようにして登録テーブルではなく学生テーブルを参照することを認識しますか?
このdb.Students
部分は Entity Framework から来ています。
投稿したリンクの「データベース コンテキストの作成」セクションを読んでください。
そこに次のコードがあります。
using System;
using System.Collections.Generic;
using System.Data.Entity;
using ContosoUniversity.Models;
using System.Data.Entity.ModelConfiguration.Conventions;
namespace ContosoUniversity.Models
{
public class SchoolContext : DbContext
{
public DbSet<Student> Students { get; set; }
public DbSet<Enrollment> Enrollments { get; set; }
public DbSet<Course> Courses { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
}
これにより、基本的に Entity Framework の "セットアップ" であるデータベース コンテキストがセットアップされ、そこからデータベース テーブルにマップする必要がある C# クラスが認識されます。
だからdb.Students
(あなたの質問から)は実際にはDbSet<Student>
.
Entity Framework の既定の規則は次のようになります。クラスを同じ名前のテーブルにマップしようとします。
通常、Student
クラスを (複数形の) という名前のテーブルにマップしStudents
ますが、これらの規則を変更/オーバーライドできます...この例でも、次の行で行っています。
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
これは、上記のコードのすぐ下のチュートリアルでも説明されています。
チュートリアルからの引用:
このコードは、DbSet
エンティティ セットごとにプロパティを作成します。Entity Framework の用語では、通常、エンティティ セットはデータベース テーブルに対応し、エンティティはテーブル内の行に対応します。
メソッド内のステートメントは、OnModelCreating
テーブル名が複数形になるのを防ぎます。これを行わなかった場合、生成されたテーブルの名前Students
は 、Courses
、および になりEnrollments
ます。代わりに、テーブル名はStudent
、Course
、および になりEnrollment
ます。開発者は、テーブル名を複数形にするべきかどうかについて意見が分かれています。このチュートリアルでは単数形を使用していますが、重要な点は、このコード行を含めたり省略したりすることで、好みの形式を選択できることです。