通过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还是可以的。
---------------------------
知道的更多,不知道的也更多
---------------------------
标签:
.netcore EF
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!