通过EntityEntry可以获取Entity状态

using Microsoft.EntityFrameworkCore.ChangeTracking;

  static async Task Main(string[] args)
  {
      using (MyDbContext ctx = new MyDbContext())
      {
          var students = ctx.Students.Skip(10).Take(3).ToArray();

          Student a1 = students[0];
          Student a2 = students[1];
          Student a3 = students[2];

          Student a4 = new Student() { Name = "new_student1" };
          Student a5 = new Student() { Name = "new_student2" };

          a1.Name = "update_student";
          ctx.Remove(a3);
          ctx.Students.Add(a4);

          // 通过Entry(),可以获取这些变化而不影响DB
          EntityEntry e1 = ctx.Entry(a1);

          Console.WriteLine(e1.State);
          Console.WriteLine(e1.DebugView.LongView);

          Console.WriteLine(ctx.Entry(a2).State);
          Console.WriteLine(ctx.Entry(a3).State);
          Console.WriteLine(ctx.Entry(a4).State);
          Console.WriteLine(ctx.Entry(a5).State);
      }
  }

默认情况下,EF会跟踪Entity变化,然后通过SaveChange把变化更新到DB。

可以通过AsNoTracking关闭跟踪,降低内存使用。

    var students = ctx.Students.AsNoTracking().Skip(10).Take(3).ToArray();

再运行以上代码,发现修改不起作用了,但是add和remove还是可以的。