ASP.NET网页设计Entity Framework 利用注重:Where查询前提顶用到的联系关系实体不必要Include仓酷云 ...
有时也搞不懂应该学那种;主要看你以后去的那个公司是使用哪种了。就像王千祥的课上说的:企业应用现在主要就三层(其实也差不多就是MVC):表示层(主要使用html写的,很简单)、业务逻辑层(主要就是应用服务器的)。最后就是数据层(其实就是学习数据库)来自博客园开辟团队开辟前列最新动静:在EntityFramework中,假如实体A联系关系了实体B,你想在加载实体A的同时加载实体B。一般做法是在LINQ查询中利用Include()。可是,假如你在查询前提顶用到了实体B,EF会主动加载实体B,这时候Include不但是过剩的,并且还会增添分外的LEFTOUTERJOIN查询,影响功能。
请看我们在博问开辟中遭受这个成绩时的一段代码:
//Forq.cnblogs.compublicclassQuestionService{privateIRepository<QuestionItem>_questionRepository;publicQuestionService(IUnitOfWorkunitOfWork):base(unitOfWork){_questionRepository=newRepository<QuestionItem>(unitOfWork);}publicList<QuestionItem>GetUnsolvedQuestions(intpageIndex,intpageSize){return_questionRepository.Entities.Include(q=>q.User).Where(q=>q.IsActive&&q.User.IsActive).Skip((pageIndex-1)*pageSize).Take(pageSize).ToList();}}publicclassQuestionItem{publicintId{get;set;}publicstringTitle{get;set;}publicboolIsActive{get;set;}publicintUserId{get;set;}publicUserUser{get;set;}}publicclassUser{publicintUserId{get;set;}publicboolIsActive{get;set;}}
在下面的代码中,我们想在GetActiveQuestions()前往List<QuestionItem>时,QuestionItem中要包括User信息,以是在LINQ查询利用了.Include(q=>q.User)。
(出格要注重的是:这里把q.User.IsActive作为查询前提之一)
然后我们用SQLServerProfiler发明,EntityFramework天生了以下的SQL语句:
SELECTTOP(25).AS,.AS,.AS,.AS,.AS,.AS,.ASFROM(SELECT.AS,.AS,.AS,.AS,.AS,.AS,row_number()OVER(ORDERBY.DESC)ASFROM.ASINNERJOIN.ASON.=.LEFTOUTERJOIN.ASON.=.WHERE(.=1)AND(.=1))ASWHERE.>0ORDERBY.DESC
.表对应的就是User实体类,下面的SQL中.呈现了两次JOIN,因为表数据量对照年夜,两次JOIN影响了实行企图,查询耗时增添。这明显是要制止的。
在与这个成绩一阵苦战以后,我们终究找到办理办法——往失落Include,就这么复杂!
从这个中央看,EntityFramework仍是挺伶俐的,可是因为不晓得它的这个伶俐的地方,反而带来了成绩。
以是,代码如人,要和她相处好,就要懂得她的统统!
既然话题已经抄起,我打算今晚发篇博文再引导一下舆论方向,使它再火两天,抛砖引玉,而且赵劼先生一直在跟帖,使.NET阵营的我感到万分难得。 在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗? 可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。 可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。 ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。 由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。 在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗? Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。 是指转换后的Servlet程序代码的行数。这给调试代码带来一定困难。所以,在排除错误时,可以采取分段排除的方法(在可能出错的代码前后输出一些字符串,用字符串是否被输出来确定代码段从哪里开始出错)。
页:
[1]