Je viens juste d'apprendre à utiliser Entity Framework pour écrire un programme de surveillance de réseau C# très simple - c'est un exercice d'apprentissage pour essayer de «rentrer chez moi» ce que je suis. J'ai seulement lu à propos de ce jour. Je suis également nouveau à C# et LINQ (juste pour compliquer les choses plus loin.)Une requête Entity Framework débutant pour remplir un WinForms ListView
Je crois que j'ai le modèle de données convenablement normalisé mais je peux me tromper. Visual Studio génère un modèle conceptuel qui semble OK. J'ai pluralisé les associations et EntitySets si nécessaire, mais j'ai du mal à effectuer ce que je pense être une requête/projection assez basique sur les données.
La base de données contient 3 tables:
[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"
je manuellement peuplé la base de données en utilisant quelques entrées simples - juste assez pour me donner quelque chose à travailler.
Pour commencer, je voudrais présenter toutes les données de résultat dans un ListView sur un formulaire WinForm. Le ListView contient les colonnes statiques suivantes:
État | Adresse du serveur | Dernière vérification
En théorie, les données de l'ListView doit être générée par la projection dans chacune des 3 tables (?):.
- La colonne « Etat » doit afficher le [Etat] lisible par l'homme [ StateLabel] liée de [Résultat]. [StateID]
- La colonne "Adresse du serveur" doit afficher [serveur]. [HostAddress] liée de [Résultat]. [ServerID]
- La "Dernière vérification" colonne doit afficher [ Résultat]. [TimeStamp]
Puisque je n'ai pas besoin de la matérialisation de l'objet et/ou des fonctions de suivi des changements d'ObjectServices, ai-je raison de penser qu'il serait plus efficace/correct d'utiliser Entity SQL/EntityClient et DbDataReader? Si oui, à quoi ressemblerait une requête Entity SQL appropriée?
Pour ce que ça vaut, j'essayé d'utiliser LINQ aux entités et types anonymes dans une méthode, mais a été contrariée par un manque de compréhension sur un type de retour approprié:
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.
Merci pour votre aide!
Steve
Merci Quintin, l'exemple de code a beaucoup aidé. – TheLearningCurve