1.实体状态
数据库上下文会跟踪内存中的实体并设置该实体的状态,从而决定调用 SaveChanges
方法时发出的SQL命令,最终实现与数据库中相应的行同步。
实体状态 | 由 DbContext 跟踪 | SaveChanges操作 |
Detached | 否 | ———— |
Unchanged | 是 | ———— |
Added | 是 | INSERT |
Modified | 是 | UPDATE |
Deleted | 是 | DELETE |
2.增删改查
//查询所有
_context.Students.ToListAsync();
//查询单个(可调用Include)
_context.Students.FirstOrDefaultAsync(m => m.ID == id);
//查询单个(性能更优,不可调用Include)
_context.Students.FindAsync(id);
//增加
_context.Students.Add(student);
//简写
_context.Add(student);
//更改所有列
_context.Students.Update(student);
//简写
_context.Update(student);
//仅更改已更新的列
TryUpdateModelAsync<Student>(
studentToUpdate,
"",
s => s.FirstMidName, s => s.LastName, s => s.EnrollmentDate)
//删除
_context.Students.Remove(student);
//简写
_context.Remove(student);
//保存更改
await _context.SaveChangesAsync();
3.防止过多发布(OverPost)
//Create场景:Bind特性
[Bind("ID,EnrollmentDate,FirstMidName,LastName")]
//Edit场景:TryUpdateModelAsync方法
//首先从数据库读取实体
var studentToUpdate = await _context.Students.FirstOrDefaultAsync(s => s.ID == id);
//然后调用TryUpdateModel
TryUpdateModelAsync<Student>(
studentToUpdate,
"",
s => s.FirstMidName, s => s.LastName, s => s.EnrollmentDate)
4.相关查询
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/csharp/entityframeworkcore/15180.html