Wie soll ich mein Viewmodel für diese hierarchische Datenstruktur ich in ASP.NET MVC angezeigt werden muß?

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

Frage

Ich habe eine Ansicht, die wie folgt aussehen:

alt text

Ich versuche, herauszufinden, wie ich mein Viewmodel für diese Ansicht vertreten sollte. Jede „Agentur“ kann mehrere „Business Units“ hat und jede „Business Unit“ kann mehr „Kunden“ hat.

In der Datenbank ich dies leicht darstellen mit einer Zuordnungstabelle und Fremdschlüssel für die Agentur, Businessunit und Client-Tabellen.

Aber jetzt muss ich LINQ verwenden diese Daten, um die Datenbank abfragen aus und dann ein Viewmodel-Objekt erstellen, das diesen baumartigen Struktur repräsentiert so meine Ansicht kann es machen.

Kann mich jemand Tipps, welche Daten-Struktur soll ich verwenden, oder was mein Ansichtsmodell könnte für diese hierarchische Struktur in C # -Code aussehen? Ich brauche mein Viewmodel-Objekt erstellen, um diese Ansicht zu weitergeben.

Alle Vorschläge, wie das Ansichtsmodell darzustellen sind geschätzt!

War es hilfreich?

Lösung

Speichern Sie einfach eine List-Instanz in Ihrer Ansicht Daten?

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

Andere Tipps

Unter der Annahme, dass Ihre Linq2Sql Umsetzung die gleichen Beziehungen in ihm wie die Datenbank hat (was, wenn Sie ziehen haben und an den Designer fallen, sie auf jeden Fall tun), ist hier, wie ich es hätte nähern.

Ich würde schaffen eine stark Teilansicht des Typs Agentur eingegeben, die jeden Abschnitt (Agentur, in Ihrem Fall) darstellen würde, nennen es AgencyReportSection.ascx. Diese Steuerung wird eine Agentur nehmen, durchläuft seine Geschäftseinheiten, die wiederum durch die Kunden durchlaufen.

Wo auch immer Sie Ihre Daten verpacken möchten, gehen Sie so etwas wie folgt aus:

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

context.LoadOptions = options;

Was dies wird Ihnen ist, dass, wenn der Kontext eine Agentur bekommt, wird es die definierten Beziehungen folgen und geben Sie auch diese Objekte. So erhalten Sie:

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

Ihre Ansicht etwas tun könnte, wie:

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

Der Grund, warum Sie die Datenlast Option tun, ist ein träges Laden in der Ansicht zu vermeiden, lassen Sie das Modell alle notwendigen Daten zusammenpacken.

Ich hoffe, dass ich Ihre Frage richtig verstanden habe ...

Ich habe vor kurzem der „ADO .NET Entity Data Model“ Vorlage wurde unter Verwendung zu einer MSSQL-Datenbank zu steuern Konnektivität, die Hierarchiedaten unterstützt und es hat gut funktioniert.

Sie können einfach Ihre Präsentationsschicht binden direkt an die Datenmodelle.

Wenn Sie Ihre Schlüssel richtig eingestellt sind in der Datenbank ist es ein Kinderspiel, um aufzustehen und running..I denke, es erfordert auch ADO.Net 3.5

ADO erstellen. NET Entity Framework Entity

MS Informationen über Unternehmen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top