Ich habe gerade angefangen zu lernen, wie man das Entity Framework benutzt, um ein sehr einfaches C# Netzwerk-Überwachungsprogramm zu schreiben - das ist eine Lernübung, um zu versuchen und nach Hause zu fahren Ich habe nur ungefähr bis heute gelesen. Ich bin auch neu in C# und LINQ (nur um die Dinge weiter zu komplizieren.)Eine Anfänger Entity Framework Abfrage um ein WinForms ListView zu füllen
Ich glaube, ich habe das Datenmodell geeignet normalisiert, aber ich kann falsch liegen. Visual Studio generiert ein konzeptionelles Modell, das OK aussieht. Ich habe die Assoziationen und EntitySets wo nötig pluralisiert, aber ich habe Schwierigkeiten, etwas zu tun, was ich für eine ziemlich einfache Abfrage/Projektion auf die Daten halte.
Die Datenbank enthält drei Tabellen:
[Server] - A server defined by the user that should be pinged.
ServerID - primary key
HostAddress - IP or hostname
[Result] - A result containing data about the last server test
ResultID - primary key
ServerID - foreign key on [Server].[ServerID]
StateID - an integer used to lookup one of 3 possible Server states
TimeStamp - Time stamp of last ping
[State] - A lookup table containing an integer -> string mapping.
StateID - a unique key
StateLabel - human-readable string like "unreachable" or "OK" or "timeout"
ich manuell die Datenbank mit ein paar einfachen Einträge bevölkert haben - gerade genug, um mir etwas zu arbeiten.
Zunächst möchte ich alle Ergebnisdaten in einem ListView auf einem WinForm präsentieren. Die ListView enthält die folgenden statischen Spalten:
Status | Serveradresse | Zuletzt überprüft
Theoretisch Daten der Listenansicht des durch die Projektion erzeugt werden muss über jede der drei Tabellen (?):.
- Die Spalte „Status“ sollte den Menschen lesbaren [Status] Anzeige [ StateLabel] verbunden von [Ergebnis]. [StateID]
- Die Spalte "Server Address" sollte [Server] anzeigen. [HostAddress] verknüpft von [Result]. [ServerID]
- Die Spalte "Zuletzt überprüft" sollte anzeigen [ Ergebnis]. [Zeitstempel]
Da ich die Object Materialization und/oder Change-Tracking-Funktionen von ObjectServices nicht brauche, habe ich Recht, dass es effizienter/korrekter ist, Entity SQL/EntityClient und DbDataReader zu verwenden? Wenn ja, wie würde eine geeignete Entity SQL-Abfrage aussehen?
Für das, was es wert ist, habe ich versucht, LINQ to Entities und anonyme Typen in einem Verfahren unter Verwendung aber durch einen Mangel an Verständnis auf einem geeigneten Rückgabetyp wurde vereitelt:
var results = from r in _context.Result
select new
{
State = (from s in _context.State
where s.StateId == r.StateId
select s.StateLabel),
r.ServerReference.Value.HostAddress,
r.TimeStamp
};
return results.ToList(); // <- No can do.
Vielen Dank für Ihre Hilfe!
Steve
Danke Quintin, der Beispielcode hat mir sehr geholfen. – TheLearningCurve