我目前正在学习一个C#教程,它有这样一个ApplicationDbContext
类文件:
public class ApplicationDbContext: DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) {}
public DbSet<Category> Category { get; set; }
}
其中,Category
定义为:
public class Category
{
[Key]
public int ID { get; set; }
[Required]
public string Name { get; set; }
public int DisplayOrder { get; set; }
}
它随后被这样引用:
private readonly ApplicationDbContext _db;
public IEnumerable<Category> Categories { get; set; }
public IndexModel(ApplicationDbContext db)
{
_db = db;
}
public void OnGet()
{
Categories = _db.Category;
}
我在Program.cs
文件中也有这个代码:
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
builder.Configuration.GetConnectionString("DefaultConnection")
));
最后一条信息是,我进行了一次迁移,创建了一个名为Category
的数据库表.
我的困惑在于这里是如何声明所有内容的;DbContext
文件中包含DbSet
的行似乎没有实例化任何内容,而只是将Category
定义为类型为DbSet<Category>
的公共变量,但随后IEnumerable<Category>
似乎将Category
视为遍历表,调用_db.Category
也是如此.
在本例中,纵观代码,引用的是Category
类,而不是Category
数据库表.这里的一切是怎么联系在一起的?