dotnetcore EF 获取Entity状态
通过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还是可以的。