2009-06-19 8 views
4

У меня есть мнение, что будет выглядеть следующим образом:Как мне создать структуру ViewModel для этих иерархических данных, которые необходимо отобразить в ASP.NET MVC?

alt text

Я пытаюсь выяснить, как я должен представлять свою ViewModel для этой точки зрения. Каждое «Агентство» может иметь несколько «бизнес-единиц», и каждая «Бизнес-единица» может иметь несколько «Клиентов».

В базе данных я легко представляю это с таблицей сопоставления и внешними ключами для таблиц агентства, BusinessUnit и Client.

Однако теперь мне нужно использовать LINQ для запроса этих данных из базы данных, а затем построить объект ViewModel, который представляет эту древовидную структуру, чтобы мой вид мог визуализировать ее.

Может ли кто-нибудь дать мне советы о том, какую структуру данных я должен использовать, или о том, как мой ViewModel может выглядеть для этой иерархической структуры в коде C#? Мне нужно создать объект ViewModel для перехода к этому представлению.

Любые предложения по представлению ViewModel оцениваются!

ответ

1

Просто хранить список экземпляр в ваших данных?

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; 
} 
0

Я недавно использовал шаблон модели данных ADO .Net Entity Data Model для управления связью с базой данных MSSQL, которая поддерживает данные иерархии, и она работает хорошо.

Вы можете просто привязать свой слой презентации непосредственно к моделям данных.

Если ключи установлены правильно в базе данных его несложно получить и running..I думаю, что это также требует ADO.Net 3,5

Creating ADO.NET Entity Framework Entity

MS information on entity

+0

К сожалению, мы должны придерживаться технологии, которую мы в настоящее время используем. Мне нужно сделать то, что я сказал в своем вопросе, построить промежуточный объект ViewModel и передать это на мой взгляд. – KingNestor

0

Предполагая, что ваша реализация Linq2Sql имеет те же отношения в ней, как в базе данных (которые, если вы сделали перетащить дизайнера, они определенно делают), вот как я бы подойти к нему.

Я бы создал строго типизированный частичный вид типа Агентство, которое будет представлять каждый раздел (Агентство, в вашем случае), назовите его AgencyReportSection.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"); %> 
<%}%> 

Причина вы делаете вариант загрузки данных, чтобы избежать отложенной загрузки в представлении, пусть модель упаковать все необходимые данные.

Надеюсь, я правильно понял ваш вопрос ...

 Смежные вопросы

  • Нет связанных вопросов^_^