Ich baue eine WPF MVVM Light-App in Visual Studio 2015 mit Entity Framework 6 mit Datenbank-erster Modellgenerierung. Ich erstelle View Model-Klassen für meine Modelle, die mit meinen Ansichten (Benutzersteuerelementen) verwendet werden können.Map Entity Framework-Navigationseigenschaften zu ViewModel-Objekten
Ich habe die folgenden drei EF-Modelle; ein Employee
kann viele EmployeeStatu
haben und ein EmployeeStatu
hat eine entsprechende description
('Urlaub von Abwesenheit', 'Archiviert', etc.) auf dem ValidEmployeeStatu
Modell. So ist employeeID
FK auf EmployeeStatu
und validEmployeeStatusID
ist FK auf EmployeeStatu
(PK auf ValidEmployeeStatu
).
public partial class Employee
{
public Employee()
{
this.EmployeeStatus = new HashSet<EmployeeStatu>();
}
public int employeeID { get; set; }
// More properties here...
public virtual ICollection<EmployeeStatu> EmployeeStatus { get; set; }
}
public partial class EmployeeStatu
{
public int employeeStatusID { get; set; }
public int employeeID { get; set; }
public int validEmployeeStatusID { get; set; }
// More properties here...
public virtual Employee Employee { get; set; }
public virtual ValidEmployeeStatu ValidEmployeeStatu { get; set; }
}
public partial class ValidEmployeeStatu
{
public ValidEmployeeStatu()
{
this.EmployeeStatus = new HashSet<EmployeeStatu>();
}
public int validEmployeeStatusID { get; set; }
public string description { get; set; }
// More properties here...
public virtual ICollection<EmployeeStatu> EmployeeStatus { get; set; }
}
Hier ist mein View-Modell für Mitarbeiter; die anderen folgen dem gleichen Muster:
public class EmployeeViewModel : ViewModelBase
{
private int _employeeId;
private string _securityId;
private IEnumerable<EmployeeStatusViewModel> _employeeStatus;
public EmployeeViewModel()
{
this.EmployeeStatusVMs = new HashSet<EmployeeStatusViewModel>();
}
public IEnumerable<EmployeeStatusViewModel> EmployeeStatusVMs
{
get { return _employeeStatus; }
set
{
if (_employeeStatus.Equals(value)) return;
_employeeStatus = value;
RaisePropertyChanged();
}
}
// More properties here...
}
ich diese LINQ-Abfrage bin mit der Daten zu holen:
var query = (from e in Context.Employees
.Include("EmployeeStatus.ValidEmployeeStatu")
.Where(comparison)
select new EmployeeViewModel
{
employeeID = e.employeeID,
securityID = e.securityID,
firstName = e.firstName,
middleName = e.middleName,
lastName = e.lastName,
suffix = e.suffix,
job = e.job,
organizationalUnit = e.organizationalUnit,
costCenter = e.costCenter,
notes = e.notes,
createdDate = e.createdDate
});
Wie ordne ich die Navigationseigenschaften EmployeeStatu
und ValidEmployeeStatu
meiner Ansicht Modelle? Und wie geben Sie dann die Werte aus den View Model-Objekten für SaveChanges()
an Ihre Modelle zurück? Vielen Dank.
Danke, @jstadnicki. Das macht vollkommen Sinn. Verfügen Sie über eine Beispielzeile, die der Rückgabe der Daten von VM an Model ähnelt? Irgendwie konnte ich auf Automapper keine gute Dokumentation finden; Viele der Links hatten Code für veraltete Methoden. – Alex
Suche nach Auto-Mapper. Sie werden sehen, dass dies nicht von Hand gemacht werden muss. Grundsätzlich werden die Zuordnungen 1-1 automatisch, in beiden Richtungen, durchgeführt. – jstadnicki
Ich würde gerne Automapper verwenden, wenn ich es verstanden habe, @jstadnicki :) Die Links, die ich fand, hatten einige, aber nicht vollständige Anfängerleitfaden. Das "Getting Started" von der Hauptseite hat nicht viel geholfen für einen Anfänger wie mich! Ich würde gerne sehen, was Sie oben in Automapper-Syntax geschrieben haben. – Alex