在ms docs Razor pages tutorial中,DbContext有一个DbSet学生集
public class SchoolContext : DbContext
{
public DbSet<Student> Students { get; set; }
并在OnPostAsync()方法中使用DbSet<TEntity>.Add(TEntity)
method(documentation)创建并添加更新的学生:
var emptyStudent = new Student();
if (await TryUpdateModelAsync<Student>(
emptyStudent,
"student", // Prefix for form value.
s => s.FirstMidName, s => s.LastName, s => s.EnrollmentDate))
{
_context.Students.Add(emptyStudent);
await _context.SaveChangesAsync();
MVC tutorial还有一个DbContext
,它有一个DbSet学生但是在StudentsController.cs的Create()post方法中,它添加了直接在DbContext上调用DbContext.add()的学生:
_context.Add(student);
await _context.SaveChangesAsync();
我看到的另一个区别是,在MVC中,学生作为参数传入:
public async Task<IActionResult> Create([Bind("LastName,FirstMidName,EnrollmentDate")] Student student)
{
这两者有什么区别吗?它们可以互换使用吗?何时使用其中一种?
在sources你可以找到InternalDbSet
's(这是抽象的DbSet
的具体实现)Add
方法的实现:
public override EntityEntry<TEntity> Add(TEntity entity)
=> _context.Add(entity);
这显然意味着它只是DbContext
s Add
的一个立面。
从技术上讲,这意味着两者完全相同。