Asp.net

DbContext.Add() 和 DbContext.DbSet<TEntity>.Add(TEntity) 有什麼區別?你什麼時候使用一個與另一個?

  • December 21, 2017

在 ms docs Razor pages教程中,DbContext 有一個 DbSet Students 集

public class SchoolContext : DbContext
{
   public DbSet&lt;Student&gt; Students { get; set; }

並在 OnPostAsync() 方法中創建然後使用DbSet&lt;TEntity&gt;.Add(TEntity)方法(文件)添加更新的學生:

       var emptyStudent = new Student();
       if (await TryUpdateModelAsync&lt;Student&gt;(
           emptyStudent,
           "student",   // Prefix for form value.
           s =&gt; s.FirstMidName, s =&gt; s.LastName, s =&gt; 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&lt;IActionResult&gt; Create([Bind("LastName,FirstMidName,EnrollmentDate")] Student student)

   {

兩者有什麼區別嗎?它們可以互換使用。何時使用其中一種?

原始碼中,您可以找到InternalDbSet’s(這是 abstract 的具體實現DbSetAdd方法的實現:

public override EntityEntry&lt;TEntity&gt; Add(TEntity entity)
       =&gt; _context.Add(entity);

這顯然意味著它只是DbContexts的一個門面Add

從技術上講,這意味著兩者的作用完全相同。

引用自:https://stackoverflow.com/questions/47923870