protected void Button2_Click(object sender, EventArgs e) { book_shop3Entities bkDBContext = new book_shop3Entities(); //即使是有where 条件判断 也是一个集合 注意一下 linq表达式的写法 //多写写 linq 多 写写 sql 语句 习惯了就好了 //使用profile 就能够捕获 查询的语句 var userInfo = from user in bkDBContext.UserInfo where user.ID > 123 select user; //打一个断点 看一下 什么时候执行 小套路 小技巧 //公司的数据库 还不能够追踪 。。那就算了 自己的数据库 查询 多玩玩就可以了 //lazing loading 提前加载 有3中方式 选择自己合适的 //代码里面没有错误 就是连警告都是没有的。 //把需要的数据库文件 也配置到 APP_Data里面 。 //int a = 9; foreach (var user in userInfo) { Response.Write(user.UserName); } }
//着一天的内容只是一个简单的了解 关键还是要 后面项目当中的应用 //数据的培训设置联系 还是要敲很多的代码 来实践 和联系 使用 //这他妈的我自己想改一点东西 都不能成功 我也是日了狗了 protected void Button4_Click(object sender, EventArgs e) { book_shop3Entities db = new book_shop3Entities(); var userInfoList = from u in db.UserInfo where u.ID == 93 select u; //new List<UserInfo> //{ // u.ID, // u.UserName, // u.UserPass, // u.RegTime, // u.Email //}; //修改数据 没有找到 Edit 的方法 连接查询 其他 重要的 但是不太天天使用的方法 //大的方向要努力 要加油 UserInfo user = userInfoList.FirstOrDefault(); user.UserPass = "******"; db.Entry(user).State = EntityState.Modified; db.SaveChanges(); }
// 反过来是 1对 1的关系 关系是双向的 1个订单 是一个用户 根据订单还可以反过来查询 用户的信息 protected void Unnamed4_Click(object sender, EventArgs e) { book_shop3Entities db = new book_shop3Entities(); var query = (from o in db.Orders where o.OrderId == "2012021309541370391" select o).FirstOrDefault(); // 只要是一个类 就可以一直的往下去点 去使用 就真的比较的方便了。。、。 Response.Write(query.Users.Address); }
//查询某一个用户的订单信息 protected void Unnamed3_Click(object sender, EventArgs e) { //这个查询就很写的就很easy 让你少些了很多的代码 会使用之后就会感觉很方便 book_shop3Entities db = new book_shop3Entities(); var queryOrder = from o in db.Orders where o.UserId == 91 select o; foreach (var o in queryOrder) { Response.Write(o.OrderId + "<br/>"); } }
//对某一个类型经常操作的内容 扩展一个方法 。以后这一个类型就可以. 出来这样就比较的方便 //IQualable Lamdba 这个类型 李曼添加了很多的扩展方法 重新 听一遍 感觉就不一样了 protected void Button2_Click(object sender, EventArgs e) { book_shop3Entities db = new book_shop3Entities(); //方法的第一参数类型 和返回值类型 //编译器能够推断出你的类型 //Func<Users, bool> whereLamda = (Users u) => { return u.Id == 3; }; //表达式数 这个内容要回头去看。。没有看完的视频都是要看的 表达式树 数据结构的知识 知道是这么一个东西 // 视频播放的比较快 速度慢一点。。用到的东西 多看看 这个方法的定义 和使用。 自己做一遍 能做出来就OK // //给委托类型的变量赋值 委托类型已经是定义好了 直接赋值一个lambda表达式就能使用了 //Func<Users, bool> whereLamda2 = u => { return u.Id == 3; }; //为什么包装了一个Express还是一个委托的类型 这个就看不懂了 //var users = db.Users.Where<Users>(u => u.Id == 12); int pageIndex = 2; int pageSize = 10; var usersPage = db.Users.Where(u => true) .OrderBy(u => u.Id) .OrderByDescending(u => u.Name) //分页的公式 先记住这么使用 具体怎么推导出来的 有兴趣再去研究 //分页从第几条数据开始获取 //其实很简单 第一页 是 从第0条开始 //第二页是从 第 10条开始 不然 就 //第一页 第10条开始了 不想第0条就加个1 轻松搞定 //不是难 是有那么一点心理阴影 知道吗 有心理阴影其实挺可怕的 //有信仰 就真的听好 。 .Skip((pageIndex - 1) * pageSize) .Take(pageSize); foreach (var u in usersPage) { Response.Write(u.Name + "<br/>"); } //分页的公式 (pageIndex - 1) * pageSize //1-10 11-20 21-30 /* * 1 0---9 * 2 (2-1)* 10 = 10 -19 * 3 20-29 * 4 * */ }
//通过导航属性来添加数据 protected void Unnamed1_Click(object sender, EventArgs e) { //给一个用户添加两条订单信息 book_shop3Entities db = new book_shop3Entities(); Users user = new Users() { Address = "江苏南京", LoginId = "13", LoginPwd = "3434", Mail = "*****@*****.**", Name = "Allen", Phone = "15258456864", UserStateId = 1 }; Orders order1 = new Orders() { Users = user, OrderDate = DateTime.Now, OrderId = Guid.NewGuid().ToString(), PostAddress = "这个是订单的某一个地址", state = 1, TotalPrice = 99.8m, //这个插入的 生成的sql数据是怎么样子的 为什么 会没有用 为什么能够关联上??? //这个是新添加一个用户 及时你添加了UserId 也是没有用的 //UserId = 88 }; Orders order2 = new Orders() { Users = user, OrderDate = DateTime.Now, OrderId = Guid.NewGuid().ToString(), PostAddress = "这个是订单的某一个地址", state = 1, TotalPrice = 99.8m, //UserId = 88 }; db.Users.Add(user); db.Orders.Add(order1); db.Orders.Add(order2); db.SaveChanges(); }
protected void Button3_Click(object sender, EventArgs e) { book_shop3Entities db = new book_shop3Entities(); //先查询想删除的数据 然后执行删除 //var userInfoList = from u in db.UserInfo // where u.ID == 127 // select u; ////使用First的话 如果没有数据化 是会抛出异常 //// FirstOrSingal 如果该序列中有多个元素 是会抛出异常的 //// ////如果没有数据的话就会 返回null一般就用这个方法就可以了 ////每次刷新又会重新提交表单 //UserInfo userInfo = userInfoList.FirstOrDefault(); //if (userInfo != null) //{ // db.UserInfo.Remove(userInfo); // db.SaveChanges(); // Response.Write("删除数据成功"); //} //else //{ // Response.Write("要删除的数据不存在"); //} //如果知道主键ID就可以直接删除数据 UserInfo user = new UserInfo() { ID = 110 }; //存储区更新、插入或删除语句影响到了意外的行数(0)。实体在加载后可能被修改或删除。有关了解和处理乐观并发异常的信息, //先让EF 找到这个对象 EF管理数据数据的对象 也都是在缓存当中的 //传入一个对象 对象的类型 然后 添加一个状态的标记 db.Entry <UserInfo>(user).State = EntityState.Deleted; db.SaveChanges(); }
//查询每一个用户的 订单 其实 join在EF里面用的都是比较的少 都是导航属性 TOdictionay tolist 分组的方法 多用 //用习惯了就一样 //查询所有用户 protected void Unnamed2_Click(object sender, EventArgs e) { book_shop3Entities db = new book_shop3Entities(); var users = from u in db.Users select u; foreach (var u in users) { Response.Write(u.Name + " "); foreach (var o in u.Orders) { Response.Write(o.OrderId); Response.Write(" " + o.TotalPrice); Response.Write("<br/>"); } Response.Write("<br/>"); Response.Write("<br/>"); Response.Write("<hr/>"); } }
//Where 查询所有用户的数据 protected void Button3_Click(object sender, EventArgs e) { book_shop3Entities db = new book_shop3Entities(); //编译器可以根据前面查询的集合的数据 //推断出 u 参数变量的类型 自己分析一下他的结构你就会有一些体会 //都是一些集合数据的操作 这个是常用的 也是必须要掌握的 //作为.net 开发的话 var users = db.Users.Where(u => u.Id > 0); int count = users.Count <Users>(); Response.Write(count); for (int i = 0; i < users.Count(); i++) { // Response.Write(users.ElementAt(i).Orders.FirstOrDefault()); //有些方法 LINQ to Entity是不能使用的。 //Response.Write(users.ElementAt(i).Name); } }
protected void Button1_Click(object sender, EventArgs e) { ///项目架构使用的什么技术 主要是的是什么 ///业务有多复杂 如何让我尽快的熟悉业务 ///我能有哪些权限 能让我做哪些事情 book_shop3Entities db = null; //一次请求不是就结束了吗 这个对象设置了有用什么用的??? if (HttpContext.Current.Items["db"] == null) { db = new book_shop3Entities(); } else { //is 是判断是不是某个类型 as 是尝试转化 不能会怎么样 //线程内唯一 看着一行代码 有很多内容 单例模式 工厂模式 //其他的设计模式 理解 不难 db = HttpContext.Current.Items["db"] as book_shop3Entities; } //昨天私活不行 景天就可以创建匿名对象了 不知道哪里写错了 var users = from u in db.Users where u.Id == 153 select new { u.Name, u.Phone }; //哪个是集合 哪个 是类 对应的关系 这个是操作集合 //不是操作数据库 又是有不一样的地方的 foreach (var u in users) { Response.Write(u.Name + ":" + u.Phone); } //使用扩展方法来查询 分页查询数据 //group by 这个使用 -- 自己多思考 多调试 //不要被那么长的 注释 下去 分组 一块一块的查看 }
protected void Unnamed5_Click(object sender, EventArgs e) { // 有一个用户ID就可以删除该用户的所有的订单的信息 //实际工作中的字段 乱七八糟的东西比这个要复杂的多了。而且还要 又快有好的完成 也是没有那么简单的 //复杂的东西 可以简单化 //知道有东西 暂时不会是没有关系 常用的东西 多学习 马上学会才是要紧的。 book_shop3Entities db = new book_shop3Entities(); //注意下 使用的时候 这个select 投影出来的数据 始终是一个集合。 var query = (from u in db.Users where u.Id == 216 select u).FirstOrDefault(); while (query.Orders.Count() > 0) { var order = query.Orders.FirstOrDefault(); db.Entry <Orders>(order).State = System.Data.Entity.EntityState.Deleted; } db.SaveChanges(); }