Ich habe 3 Modelle:Strukturieren von Modellen in einer einfachen Hierarchie in MVC, was ist die beste Vorgehensweise?
Projekte
public int ProjectID { get; set; }
public string Description { get; set; }
public string UserID { get; set; }
[ForeignKey("UserID")]
public virtual ApplicationUser User { get; set; }
public virtual ICollection<Job> Jobs { get; set; }
Jobs
public int JobID { get; set; }
public int ProjectID { get; set; }
public string Title { get; set; }
public string Jobdescription { get; set; }
public string UserID { get; set; }
[ForeignKey("UserID")]
public virtual ApplicationUser User { get; set; }
public virtual Project Projects { get; set; }
public virtual ICollection<Log> Logs { get; set; }
public virtual ICollection<Assignment> Assignments { get; set; }
Logs
public int LogID { get; set; }
public int JobID { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd HH:mm}")]
public DateTime Logstart { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd HH:mm}")]
public DateTime Logend { get; set; }
public int totaltime { get; set; }
public string Notes { get; set; }
public string UserID { get; set; }
[ForeignKey("UserID")]
public virtual ApplicationUser User { get; set; }
public virtual Job Job { get; set; }
ich zum Beispiel in meinen Projekten Index sehen eine Summe haben möchte Alle 'Totaltime' für alle Protokolle für jedes Projekt. In meinem Job Index-Seite kann ich einfach das tun, indem diese Summen innerhalb einer foreach-Schleife wie folgt meiner Ansicht nach Summieren:
@TimeSpan.FromMinutes(item.Logs.Sum(i => i.totaltime))
aber ich weiß nicht, wie die gleiche Sache auf meinen Projekte Seite zu tun, ohne entweder die Schaffung ein Viewmodel oder Hinzufügen des ProjectID-Schlüssels zum Logs-Modell, so dass ich das oben genannte für Projekte auf der Indexseite des Projekts tun kann.
kann ich den Wert totaltime für den ersten Job jedes Projekts bekommen dies mit:
@TimeSpan.FromMinutes(item.Jobs.Sum(i => i.Logs.First().totaltime))
aber ich weiß nicht, wie ich das schreiben kann, für jeden Auftrag alle ‚totaltimes‘ zu summieren.
Was ich gerne wissen würde, ist, was der beste Weg ist, dies zu tun. Muss ich ein Viewmodel erstellen oder eine Beziehung zum Projektmodell in meinem Protokollmodell hinzufügen, in der Art und Weise, in der sich das Projektmodell auf das Jobmodell bezieht? Gibt es Nachteile oder Probleme mit einer dieser Methoden, die ich vermisse? Sicherlich gibt es einen einfachen Weg für mich, die "Gesamtzeit" für ein Projekt zu erreichen, indem ich etwas benutze, das ich oben verwende.
Ich bin wie Sie in der Lage zu sagen, nur versuchen MVC langsam zu lernen. Vielen Dank.
Sie sollten ein Ansichtsmodell werden mit dem Endzustand der Informationen, die Sie in der Ansicht wollen darstellen präsentieren, sollten Sie nicht direkt zu der Ansicht EF Entitäten zu binden versuchen, . –
Danke für deinen Kommentar, ich benutze ein Viewmodel. – Rob