在ms docs Razor pages tutorial中,DbContext有一个DbSet学生集
public class SchoolContext : DbContext
{
public DbSet<Student> Students { get; set; }
并在OnPostAsync()方法中使用DbSet<TEntity>.Add(TEntity)
方法(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)
{
这两者有什么区别吗?它们可以互换使用吗?何时使用其中一种?
答案 0 :(得分:7)
在sources中,您可以找到InternalDbSet
's的实现(这是抽象DbSet
)Add
方法的具体实现:
public override EntityEntry<TEntity> Add(TEntity entity)
=> _context.Add(entity);
这显然意味着它只是DbContext
Add
的外观。
从技术上讲,这意味着两者完全相同。