DbContext.Add()和DbContext.DbSet有什么区别 。新增(TEntity)已?你什么时候使用一个与另一个?

问题描述 投票:9回答:1

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

    {

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

asp.net asp.net-mvc razor asp.net-core
1个回答
7
投票

sources你可以找到InternalDbSet's(这是抽象的DbSet的具体实现)Add方法的实现:

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

这显然意味着它只是DbContexts Add的一个立面。

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

© www.soinside.com 2019 - 2024. All rights reserved.