因为EF对对象的增删改查,都是由ef数据上下文对象来完成的,所以只有这个对象存在于ef数据上下文中,并且,只有此对象被标记为修改状态,修改过得属性值被标记为修改状态,才能被修改。
- 增
/// <summary> /// 添加单个实体 /// </summary> public static void AddUser() { using (EFEntities db = new EFEntities()) { User u = new User() { RoleID = 1, UserID = 4, UserName = "1", UserPassword = "1" }; db.Users.Add(u);//生成SQL语句 db.SaveChanges();//查询语句真正执行 } }
- 删
/// <summary> /// 删除单个实体 /// </summary> public static void DeleteUser() { using (EFEntities db = new EFEntities()) { User u = new User() { RoleID = 1, UserID = 4, UserName = "1", UserPassword = "1" }; //也可以使用entry来附加和修改 DbEntityEntry<User> entry = db.Entry<User>(u); entry.State = System.Data.EntityState.Deleted;//标记此对象在上下文中的状态 db.Users.Remove(u); db.SaveChanges();//查询语句真正执行 } }
- 改
/// <summary> /// 修改实体,先查询后修改 /// </summary> public static void ModifyUser() { using (EFEntities db = new EFEntities()) { User u1 = db.Users.Where(u => u.UserID == 4).FirstOrDefault( ); u1.UserName = "刘颖"; db.SaveChanges(); } }
- 查
ef优点:延迟查询,按需加载
- 延迟查询:查询语句的是否已经完整的问题
- 按需加载:只有真正需要查询返回值的时候,才真正执行查询语句
哦,现在才发现EF里用的都是linq语句,所以下一篇博客总结一下最近学的LINQ。/// <summary> /// 查询单个实体 /// </summary> /// <returns></returns> public static User QueryUser() { using (EFEntities db = new EFEntities()) { //查询语句并没有真正执行,在这里只是进行的是SQL语句的拼接 DbQuery<User> query = db.Users.Where(u => u.UserID > 1).OrderBy(u => u.UserName).Take(2) as DbQuery<User>; User u1 = query.FirstOrDefault();//语句真正执行 return u1; } }