EF简单增删改查
第一步:创建上下文对象
using(var db = new Entities()) { //数据操作 }
新增
UserInfo user = new UserInfo() { UserName = "zhangsan1", UserPass = "123123" }; db.UserInfo.Add(user);
删除
user = new UserInfo() { UserID = 4, //根据主键删除 UserName = "zhangsan", UserPass = "12312311111" }; db.Entry<UserInfo>(user).State = System.Data.Entity.EntityState.Deleted;
说明:此例中虽然指定了UserName和UserPass属性值,但是EF执行的时候只会根据主键UserID生成查询条件,所以只需要制定UserID即可。
删除 方法2
user = new UserInfo() { UserID = 13 //根据主键删除 }; //Attach的实体事先不能已经在内存中,否则上下文会追踪到两个相同键名的实体 db.UserInfo.Attach(user);//将对象添加到EF管理容器中 ObjectStateManager db.UserInfo.Remove(user);//将对象包装类状态标识为删除
删除 先查询-再删除
//先加载整个实体 再删除 执行了2次sql 效率略低 using (var db = new Entities()) { var user = (from v in db.UserInfo where v.UserID == 14 select v).Single(); db.UserInfo.Remove(user); db.SaveChanges(); }
修改
user = new UserInfo() { UserID = 12, UserName = "zhangsan", UserPass = "987654" }; db.Entry<UserInfo>(user).State = System.Data.Entity.EntityState.Modified;
修改单个属性
user = new UserInfo() { UserID = 12, UserName = "zhangsan" }; db.UserInfo.Attach(user); db.Entry<UserInfo>(user).Property<string>(v => v.UserName).IsModified = true;
说明:将UserID=12的用户名称改为 zhangsan
修改单个实体 先查询-再修改
using (var db = new Entities())
{
var user = (from v in db.UserInfo
where v.UserName == "zhangsan"
select v).Single();
user.UserPass = "123456";
db.SaveChanges();
}
说明:将用户名为 zhangsan的用户 密码修改为:123456
查询所有实体
var users = db.UserInfo; foreach (var v in users) { ObjectDumper.Write(v);//打印实体 }
查询单个实体 主键查询
using (var db = new Entities()) { var user = db.UserInfo.Find(12); ObjectDumper.Write(user); }
说明:查询UserID=12的用户
备注:所有增删改操作都需要调用 db.SaveChanges() 方法,才能更新到数据库。
完整案例:
using(var db = new Entities()) { //新增 UserInfo user = new UserInfo() { UserName = "zhangsan1", UserPass = "123123" }; db.UserInfo.Add(user); //删除 user = new UserInfo() { UserID = 4, //根据主键删除 UserName = "zhangsan", UserPass = "12312311111" }; db.Entry<UserInfo>(user).State = System.Data.Entity.EntityState.Deleted; //删除 方法2 user = new UserInfo() { UserID = 13 //根据主键删除 }; //Attach的实体事先不能已经在内存中,否则上下文会追踪到两个相同键名的实体 db.UserInfo.Attach(user);//将对象添加到EF管理容器中 ObjectStateManager db.UserInfo.Remove(user);//将对象包装类状态标识为删除 //删除单个实体 //先加载整个实体 再删除 执行了2次sql 效率略低 user = (from v in db.UserInfo where v.UserID == 14 select v).Single(); db.UserInfo.Remove(user); db.SaveChanges(); //修改 user = new UserInfo() { UserID = 12, UserName = "zhangsan", UserPass = "987654" }; db.Entry<UserInfo>(user).State = System.Data.Entity.EntityState.Modified; //修改单个属性 db.UserInfo.Attach(user); db.Entry<UserInfo>(user).Property<string>(v => v.UserName).IsModified = true; //修改单个实体 user = (from v in db.UserInfo where v.UserName == "zhangsan" select v).Single(); user.UserPass = "abcd"; db.SaveChanges(); //查询遍历 var users = db.UserInfo; foreach (var v in users) { ObjectDumper.Write(v); } //查询单个实体 user = db.UserInfo.Find(12); ObjectDumper.Write(user); //保存更新到数据库 db.SaveChanges(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)