应用程序如何区分表以显示数据?当您return View(db.Students.ToList())
按照链接中的示例调用时,应用程序如何知道要查看学生表而不是注册表?
该db.Students
部分来自实体框架。
阅读您发布的链接中的“创建数据库上下文”部分。
您将在那里找到以下代码:
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
为每个实体集创建一个属性。在实体框架术语中,一个实体集通常对应一个数据库表,一个实体对应表中的一行。
该OnModelCreating
方法中的语句防止表名被复数。如果您不这样做,生成的表将被命名为Students
、Courses
和Enrollments
。相反,表名将是Student
、Course
和Enrollment
。开发人员对表名是否应该是复数形式存在分歧。本教程使用单数形式,但重要的是您可以通过包含或省略这行代码来选择您喜欢的任何形式。