Asp.net
DbContext.Add() 和 DbContext.DbSet<TEntity>.Add(TEntity) 有什麼區別?你什麼時候使用一個與另一個?
在 ms docs Razor pages教程中,DbContext 有一個 DbSet Students 集
public class SchoolContext : DbContext { public DbSet<Student> Students { get; set; }並在 OnPostAsync() 方法中創建然後使用
DbSet<TEntity>.Add(TEntity)方法(文件)添加更新的學生: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 教程也有一個 DbSet Students ,
DbContext但是在 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) {兩者有什麼區別嗎?它們可以互換使用。何時使用其中一種?
在原始碼中,您可以找到
InternalDbSet’s(這是 abstract 的具體實現DbSet)Add方法的實現:public override EntityEntry<TEntity> Add(TEntity entity) => _context.Add(entity);這顯然意味著它只是
DbContexts的一個門面Add。從技術上講,這意味著兩者的作用完全相同。