DbContext.Add()和DbContext.DbSet <tentity> .Add(TEntity)有什么区别?你什么时候使用一个与另一个?

时间:2017-12-21 11:21:19

标签: asp.net asp.net-mvc razor asp.net-core

在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)

    {

这两者有什么区别吗?它们可以互换使用吗?何时使用其中一种?

1 个答案:

答案 0 :(得分:7)

sources中,您可以找到InternalDbSet's的实现(这是抽象DbSetAdd方法的具体实现:

public override EntityEntry<TEntity> Add(TEntity entity)
        => _context.Add(entity);

这显然意味着它只是DbContext Add的外观。

从技术上讲,这意味着两者完全相同。