当前位置: 首页 > news >正文

expedia电子商务网站建设用dw做电子商务网站步骤

expedia电子商务网站建设,用dw做电子商务网站步骤,小游戏网页在线玩,报班学平面设计注意#xff1a;以下内容如果没有特别申明#xff0c;默认使用的EF6.0版本#xff0c;code first模式。 推荐MiniProfiler插件 工欲善其事#xff0c;必先利其器。 我们使用EF和在很大程度提高了开发速度#xff0c;不过随之带来的是很多性能低下的写法和生成不太高效的sq… 注意以下内容如果没有特别申明默认使用的EF6.0版本code first模式。 推荐MiniProfiler插件 工欲善其事必先利其器。 我们使用EF和在很大程度提高了开发速度不过随之带来的是很多性能低下的写法和生成不太高效的sql。 虽然我们可以使用SQL Server Profiler来监控执行的sql不过个人觉得实属麻烦每次需要打开、过滤、清除、关闭。 在这里强烈推荐一个插件MiniProfiler。实时监控页面请求对应执行的sql语句、执行时间。简单、方便、针对性强。 如图(具体使用和介绍请移步) 数据准备 新建实体Score成绩分数表、Student学生表、Teacher老师表 后面会给出demo代码下载链接 foreach循环的陷进  1.关于延迟加载 请看上图红框。为什么StudentId有值而Studet为null因为使用code first需要设置导航属性为virtual才会加载延迟加载数据。 2.关于在循环中访问导航属性的异常处理接着上面,加上virtual后会报以下异常 已有打开的与此 Command 相关联的 DataReader必须首先将它关闭。 解决方案 方案1、设定ConnectionString加上MultipleActiveResultSetstrue,但只适用于SQL 2005以后的版本方案2、或者先读出放置在List中 3.以上两点仅为热身我们说的陷阱才刚刚开始 然后我们点击打开MiniProfiler工具不要被吓到 解决方案使用Include显示连接查询注意:需要手动导入using System.Data.Entity 不然Include只能传表名字符串。 再看MiniProfiler的监控瞬间101条sql变成了1条这其中的性能可想而知。 AutoMapper工具 上面我们通过Include显示的执行表的连接查询显然是不错的但还不够。如果我们只需要查询数据的某些字段呢上面查询所有字段岂不是很浪费内存存储空间和应用程序与数据库数据传输带宽。 我们可以 对应监控到的sql 我们看到生成的sql查询的字段少了很多。只有我们显示列出来字段的和一个StudentIdStudentId用来连接查询条件的。 是的这样的方式很不错。可是有没有什么更好的方案或方式呢答案是肯定的。不然也不会在这里屁话了。如果表字段非常多我们需要使用的字段也非常多导航属性也非常多的时候这样的手动映射就显得不那么好看了。那么接下来我们开始介绍使用AutoMapper来完成映射 注意首先需要NuGet下载AutoMapper。 我们看到上面查询语句没有一个个的手动映射而映射都是独立配置了。其中CreateMap应该是要写到Global.asax文件里面的。其实也就是分离了映射部分清晰了查询语句。细心的同学可能注意到了这种方式还免去了主动Include 我们看到了生成的sql和前面有些许不同但只生成了一条sql并且结果也是正确的。(其实就是多了一条CASE WHEN ([Extent2].[Id] IS NOT NULL) THEN 1 END AS [C1]。看起来这条语句并没有什么实际意义然而这是AutoMapper生成的sql同时我也表示不理解为什么和EF生成的不同) 这样做的好处 避免在循环中访问导航属性多次执行sql语句。避免了查询语句中太多的手动映射影响代码的阅读。 关于AutoMapper的其他一些资料 http://www.cnblogs.com/xishuai/p/3712361.html http://www.cnblogs.com/xishuai/p/3700052.html http://www.cnblogs.com/farb/p/AutoMapperContent.html 联表查询统计 要求查询前100个学生考试类型“模拟考试”、“正式考试”、考试次数、语文平均分、学生姓名且考试次数大于等于3次。按考试类型分类统计 代码如下 看到这样的代码我第一反应是惨了。又在循环执行sql了。监控如下 其实我们只需要稍微改动就把101条sql变成1条如下 马上变1条。 我们打开查看详细的sql语句 发现这仅仅只是查询结果集合而已其中的按考试类型来统计是程序拿到所有数据后在计算的而不是在数据库内计算然后直接返回结果这样同样是浪费了数据库查询数据传输。 关于连接查询分组统计我们可以使用SelectMany如下 监控sql如下是不是简洁多了呢 关于SelectMany资料 http://www.cnblogs.com/lifepoem/archive/2011/11/18/2253579.html http://www.cnblogs.com/heyuquan/p/Linq-to-Objects.html 性能提升之AsNonUnicode 监控到的sql 我们看到EF正常情况生成的sql会在前面带上“N”如果我们加上DbFunctions.AsNonUnicode生成的sql是没有“N”的当你发现带上“N”的sql比没有带“N”的 sql查询速度慢很多的时候那就知道该怎么办。 以前用oracle的时候带不带“N”查询效率差别特别明显今天用sql server测试并没有发现什么差别。还有我发现EF6会根据数据库中是nvarchar的时候才会生成带“N”的sqloracle数据库没测试有兴趣的同学可以测试下 性能提升之AsNoTracking 我们看生成的sql sql是生成的一模一样但是执行时间却是4.8倍。原因仅仅只是第一条EF语句多加了一个AsNoTracking。 AsNoTracking干什么的呢无跟踪查询而已也就是说查询出来的对象不能直接做修改。所以我们在做数据集合查询显示而又不需要对集合修改并更新到数据库的时候一定不要忘记加上AsNoTracking。 多字段组合排序字符串 要求查询名字里面带有“张三”的学生先按名字排序再按年龄排序。 咦不对啊。按名字排序被年龄排序覆盖了。我们应该用ThenBy来组合排序。 不错不错正是我们想要的效果。如果你不想用ThenBy且都是升序的话我们也可以 生成的sql是一样的。与OrderBy、ThenBy对应的降序有OrderByDescending、ThenByDescending。 看似好像很完美了。其实不然我们大多数情况排序是动态的。比如我们会更加前端页面不同的操作要求不同字段的不同排序。那我们后台应该怎么做呢 当然这样完成是没问题的只要你愿意。可以这么多可能的判断有没有感觉非常SB是的我们当然有更好的解决方案。要是OrderBy可以直接传字符串 解决方案 guget下载System.Linq.Dynamic 导入System.Linq.Dynamic命名空间编写OrderBy的扩展方法 然后上面又长又臭的代码可以写成 我们看下生成的sql 和我们想要的效果完全符合是不是感觉美美哒 lamdba条件组合 要求根据不同情况查询可能情况 查询name“张三” 的所有学生查询name“张三” 或者 age18的所有学生 实现代码 是不是味到了同样的臭味。下面我们来灵活组装Lamdba条件。 解决方案 这段代码我也是从网上偷的具体链接找不到了。 然后我们的代码可以写成 有没有美美哒一点。然后我们看看生成的sql是否正确 EF的预热 http://www.cnblogs.com/dudu/p/entity-framework-warm-up.html count(*)被你用坏了吗Any的用法 要求查询是否存在名字为“张三”的学生。你的代码会怎样写呢 第一种第二种第三种呵呵我以前就是使用的第一种然后有人说“你count被你用坏了”后来我想了想了怎么就被我用坏了呢直到对比了这三个语句的性能后我知道了。 性能之差竟有三百多倍count确实被我用坏了。我想不止被我一个人用坏了吧。 我们看到上面的Any干嘛的官方解释是 我反复阅读这个中文解释一直无法理解。甚至早有人也提出过同样的疑问《实在看不懂MSDN关于 Any 的解释》 所以我个人理解也是“确定集合中是否有元素满足某一条件”。我们来看看any其他用法 要求查询教过“张三”或“李四”的老师 实现代码 两种方式以前我会习惯写第一种。当然我们看看生成过的sql和执行效率之后看法改变了。 效率之差竟有近六倍。 我们再对比下count 得出奇怪的结论 在导航属性里面使用count和使用any性能区别不大反而FirstOrDefault() ! null的方式性能最差。在直接属性判断里面any和FirstOrDefault() ! null性能区别不大count性能要差的多。所以不管是直接属性还是导航属性我们都用any来判断是否存在是最稳当的。 透明标识符 假如由于各种原因我们需要写下面这样逻辑的语句 我们可以写成这样更好 看生成的sql就知道了 第二种方式生成的sql要干净得多性能也更好。 EntityFramework.Extended 这里推荐下插件EntityFramework.Extended看了下很不错。 最大的亮点就是可以直接批量修改、删除不用像EF默认的需要先做查询操作。 至于官方EF为什么没有提供这样的支持就不知道了。不过使用EntityFramework.Extended需要注意以下几点 只支持sql server批量修改、删除时不能实现事务也就是出了异常不能回滚没有联级删除 http://www.cnblogs.com/GuZhenYin/p/5482288.html 自定义IQueryable扩展方法  最后整理下自定义的IQueryable的扩展。   原文地址http://www.cnblogs.com/zhaopei/p/5721789.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注
http://wiki.neutronadmin.com/news/62984/

相关文章:

  • 上海手机网站制作公司51网站空间相册
  • 公司商城网站开发费做什么科目海外推广代理商
  • 在线推广企业网站的方法是中国肩章军衔图解
  • 网站设计基础做个网站需要多少钱?有没有旧装修要拆
  • 长春一般建一个网站需要多少钱百度移动网站提交
  • 西宁专业做网站公司在线图片制作器
  • 深圳市国外网站建设服务机构wordpress国产主题推荐
  • 资讯网站源码用python做网页与html
  • 北京站asp网站如何虚拟发布
  • windows 网站开发网站备案名称怎么修改
  • 网站建设的可用性石家庄青园网站建设
  • 网站建设html模板如何免费发布个人网站
  • 新闻类网站html模板免费下载开发一个网站需要多少人
  • 微信网站地址青岛最新发生的新闻
  • 产品介绍网站html源码谷歌安装器
  • 网站开发 技术维护湖南省建设工程信息网站
  • 电商首页模板网站wordpress企业模板中文
  • 装修设计灵感网站长沙网页设计培训推荐沙大计教育专业
  • 网站挂马 屏蔽站长的ip网站关键词修改
  • 做景区网站建设的公司十大搞笑素材网站
  • 网站文章内容一键排版功能兴远建设网站
  • 怎么用自助网站山东富泰建设工程有限公司网站
  • 北海网站网站建设网站的颜色
  • 青岛网站建设莫道网络残疾人无障碍网站怎么做
  • 站群软件哪个好乐清企业网站建站
  • 舟山建设管理网站工作室官网模板
  • 唐山网站建设哪家专业上海人才市场网
  • 白城网站建设网站引导页面
  • 门户网站策划书深圳网咯鸟网站建设公司怎么样
  • 药品网站建设销售策略和营销策略