2011-02-09 3 views
0

다음 특정 경우 및 일반적으로 asp.net mvc 2 작업을 실행하는 동안 데이터베이스 왕복 횟수를 줄일 수 있습니까? linq-to-sql을 사용하고 있습니다. 다음 코드는 데이터베이스를 60 번 왕복하는 60 번의 select와 같은 결과를 낳습니다. 왕복 횟수를 줄이려면 어떻게해야합니까?왕복 횟수 감소 - linq-to-sql

내 코드가 더 필요한 경우 게시 할 것입니다.

내보기 모델 :

public class ArticlesContainerViewModel 
{ 
    public ArticlesContainerViewModel() 
    { 
    } 

    public Article CategoryArticle { get; set; } 

    public IList<ArticlesNode> CategoryNodes { get; set; } 
} 

public class ArticlesNode 
{ 
    public Article NodeArticle { get; set; } 

    public IQueryable<Article> NodeItems { get; set; } 
} 

뷰 :

<ul class="tabs"> 
     <% foreach (var category in Model) 
      { %> 
     <li><a href="#" class="s"> 
      <%= Html.Encode(category.CategoryArticle.AbbreviatedTitle) %></a></li> 
     <% } %> 
    </ul> 
    <!-- tab "panes" --> 
    <div class="panes"> 
     <% foreach (var category in Model) 
      { 
     %> 
     <div> 
      <table style="width: 100%;" cellpadding="0" cellspacing="0"> 
       <% int counter = 0; foreach (var node in category.CategoryNodes) 
        { 
       %> 
       <%if (counter % 2 == 0) 
        { %> 
       <tr> 
        <%} %> 
        <td class="content-container"> 
         <div class="index-node-title"> 
          <%= Html.Encode(node.NodeArticle.ArticleTitle)%>&nbsp;<span class="small1 darkGrey2">(<%= Html.Encode(node.NodeItems.Count().ToString())%>)</span> 
         </div> 
         <div class="index-node-content"> 
          <ul class="index-node-content-list"> 
           <% foreach (var item in node.NodeItems.Take(2)) 

답변

1

당신이 나에게, 내가 Model의 유형 유형 IList<ArticlesContainerViewModel>의 것을 생각하면 코드가 약간 지저분하거나 비슷한 것. 문제는 응용 프로그램에서이 "높음"을 IQueryable 사용하고 있다는 것입니다. 내가 갈 것 구조는 다음

1. First select all categories and put that in your `ViewModel` using a single query. 
2. From all your categories select all your articles or what else from the db in a single query, put the result in a dictionary where category is the key. 

그런 식으로 당신이 지금 겪고있는 것처럼 두 개의 쿼리 대신 m*(n+1)을 얻을 수 있어야합니다.

+0

감사합니다, 시도해 보겠습니다. 일을하는보다 효율적인 방법 인 것 같습니다 ... – user560498

+0

+1 @Tomas –