ASP.NET MVC에 표시 해야하는이 계층 적 데이터에 대해 뷰 모델을 어떻게 구성해야합니까?

StackOverflow https://stackoverflow.com/questions/1018679

문제

나는 다음과 같이 보이는 견해가있다.

alt text

이보기에 대한 내 뷰 모델을 어떻게 표현 해야하는지 알아 내려고 노력하고 있습니다. 각 "대행사"에는 여러 "비즈니스 단위"가있을 수 있으며 각 "비즈니스 단위"는 여러 "클라이언트"를 가질 수 있습니다.

데이터베이스에서 나는 대행사, 비즈니스 유닛 및 클라이언트 테이블을위한 매핑 테이블과 외래 키로 쉽게 표현합니다.

그러나 이제 LINQ를 사용하여 데이터베이스 에서이 데이터를 쿼리 한 다음이 트리와 같은 구조를 나타내는 ViewModel 객체를 구성하여 내 뷰가 렌더링 될 수 있어야합니다.

누구든지 내가 사용해야하는 데이터 구조 또는 C# 코드 의이 계층 구조에 대해 내 뷰 모델이 어떻게 보일지에 대한 팁을 줄 수 있습니까? 이보기로 전달하려면 ViewModel 객체를 만들어야합니다.

뷰 모델을 표현하는 방법에 대한 제안은 감사합니다!

도움이 되었습니까?

해결책

뷰 데이터에 목록 인스턴스를 저장 하시겠습니까?

public class Agency
{
   public List<BusinessUnit> Units;
   public string Name;
   public int NumberOfAccounts
   {
      get 
      {
         int ret = 0;
         foreach(BusinessUnit unit in units)
            ret += unit.NumberOfAccounts;
         return ret;
      }
   }
   // ... continue this strategy for other properties
}
public class BusinessUnit
{
   public List<Client> clients;
   public string Name;
   public int NumberOfAccounts
   {
      get 
      {
         int ret = 0;
         foreach(Client client in clients)
            ret += client.NumberOfAccounts;
         return ret;
      }
   }
   // ... continue this strategy for other properties

}
public class Client
{
   public string Name;
   public int NumberOfAccounts;
}

다른 팁

LINQ2SQL 구현이 데이터베이스와 동일한 관계를 가지고 있다고 가정하면 (디자이너에게 드래그 앤 드롭을했을 때) 여기에 내가 접근하는 방법은 다음과 같습니다.

각 섹션 (귀하의 경우 에이전시)을 나타내는 유형 대행사에 대한 강력하게 입력 한 부분보기를 작성하고 IT AgencyRportsection.Ascx라고 부릅니다. 이 통제는 비즈니스 단위를 통해 반복되는 대행사를 가져갈 것이며, 이는 고객을 통해 반복합니다.

데이터를 포장하는 곳마다 다음과 같은 작업을 수행하십시오.

DataContext context = new DataContext();
DataLoadOptions options = new DataLoadOptions();
options.LoadWith<Agency>(a => a.BusinessUnit);
options.LoadWith<BusinessUnit>(b => b.Client); 

context.LoadOptions = options;

이것이 당신에게주는 것은 맥락에서 대행사를 얻을 때, 정의 된 관계를 따르고 해당 대상들도 제공한다는 것입니다. 그래서 당신은 얻는다 :

Agency a = context.Agency.FirstOrDefault();
IEnumerable<BusinessUnit> units = a.BusinessUnits;
IEnumerable<Client> clients = units.Clients;

당신의 견해는 다음과 같은 일을 할 수 있습니다.

<% foreach(var agency in agencies)%{>
<% Html.RenderPartial("AgencyReportSection"); %> 
<%}%>

데이터로드 옵션을 수행하는 이유는보기에서 게으른로드를 피하고 모델이 필요한 모든 데이터를 포장하도록하는 것입니다.

나는 당신의 질문을 올바르게 이해했으면 좋겠다 ...

최근에 "ADO .NET Entity Data Model"템플릿을 사용하여 계층 구조 데이터를 지원하는 MSSQL 데이터베이스에 대한 연결을 제어하고 잘 작동했습니다.

프레젠테이션 계층을 데이터 모델에 직접 묶을 수 있습니다.

데이터베이스에서 키가 올바르게 설정되면 일어나서 실행할 수있는 스냅입니다. ado.net 3.5도 필요하다고 생각합니다.

ado.net 엔티티 프레임 워크 엔티티 작성

엔티티에 대한 MS 정보

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top