Ein Anfänger-Entity Framework-Abfrage, die zum Auffüllen einer WinForms-ListView

Ich habe gerade angefangen zu lernen, wie man das Entity Framework zu schreiben ein sehr einfaches C# - Netzwerk-monitoring-Programm - dies ist ein Lern-übung, um zu versuchen und "drive home" was habe ich nur darüber gelesen bisher. Ich bin auch neu in C# und LINQ (um nur die Dinge zu komplizieren weiter.)

Ich glaube, ich habe das Datenmodell entsprechend normalisiert, aber ich könnte falsch sein. Visual Studio generiert ein konzeptionelles Modell, das aussieht, OK. Ich habe pluralisierten der Verbände und EntitySets, wo notwendig, aber ich bin kämpfen, um durchzuführen, was ich denke, ist eine Recht einfache Abfrage/Projektion auf die Daten.

Die Datenbank enthält 3 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"

Habe ich manuell aufgefüllt, die Datenbank mit ein paar einfachen Einträgen, gerade genug, um geben Sie mir etwas, mit zu arbeiten.

Für den Anfang würde ich mag zu präsentieren, die alle Ergebnis-Daten in ein ListView auf einer WinForm. Die Listenansicht enthält die folgenden statischen Spalten:

Staat | Server-Adresse | Zuletzt überprüft

In der Theorie, die ListView-Daten müssen erzeugt werden, durch Projektion(?) in jeder der 3 Tabellen:

  • Der "Status" - Spalte angezeigt werden sollen, die den Menschen lesbaren [Status].[StateLabel] verlinkt [Ergebnis].[StateID]
  • Die "Server-Adresse" die Spalte angezeigt werden soll [Server].[HostAddress] verlinkt [Ergebnis].[ServerID]
  • Die "Last Checked" - Spalte angezeigt werden soll [Ergebnis].[TimeStamp]

Da habe ich keine Notwendigkeit für das Objekt Eintritt und/oder change-tracking-Funktionen von ObjectServices, bin ich Recht in der Annahme, es wäre effizienter/korrekt zu verwenden, Entity SQL, EntityClient-und DbDataReader? Wenn ja, was wäre ein geeignetes Entity-SQL-Abfrage Aussehen?

Für was es Wert ist, ich habe versucht, mithilfe von LINQ to Entities und anonyme Typen in einer Methode, wurde aber vereitelt durch einen Mangel an Verständnis auf einen geeigneten Rückgabetyp:

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

Schreibe einen Kommentar