Je suis à la recherche du meilleur moyen de charger et de filtrer les entités enfants associées. J'ai quelque chose qui fonctionne, mais je ne sais pas si c'est la meilleure ou même la bonne façon de réaliser ce que je veux. Exemple de code de travail ci-dessous. Avantages et inconvénients serait génial! Merci!Filtrage des entités liées avec Entity Framework
public Site Find(int siteID)
{
// Can't use include here, not possible to filter related (child) entities
// return _context.Sites.Where(x => x.ID == siteID)
// .Include("SiteLoggers")
// .Where(x => x.Deleted == false)
// .FirstOrDefault();
var site = _context.Sites.Where(x => x.ID == siteID).FirstOrDefault();
if(site != null)
{
site.SiteLoggers = site.SiteLoggers.Where(x => x.SiteID == siteID &&
x.Deleted == false)
.ToList();
}
return site;
}
EDIT:
Ajouté POCOS
public class Site
{
public int ID { get; set; }
public int LocationID { get; set; }
public bool Active { get; set; }
public bool Deleted { get; set; }
public string Name { get; set; }
public virtual Location Location { get; set; }
public virtual ICollection<SiteLogger> SiteLoggers { get; set; }
public virtual ICollection<LinkDcSite> DcSiteLinks { get; set; }
}
public class SiteLogger
{
public int ID { get; set; }
public int UID { get; set; }
public int SiteID { get; set; }
public int LocationID { get; set; }
public string Name { get; set; }
public bool Active { get; set; }
public bool Deleted { get; set; }
public virtual Site Site { get; set; }
public virtual Location Location { get; set; }
public virtual ICollection<SiteLoggerSensor> SiteLoggerSensors { get; set; }
public virtual ICollection<LinkLoggerSiteLogger> LinkLoggerSiteLogger { get; set; }
}
Hi. Dans votre exemple, votre requête renvoie juste une collection de SiteLoggers et non un site, mais dites-vous que je peux obtenir le site via la collection SiteLoggers? I.e var siteLoggers = _context.SiteLoggers.Where (x => x.SiteID == siteID &&! X.Deleted); Site site = null; si (siteLoggers! = Null) site = siteLoggers.FirstOrDefault(). Site; site de retour; – Matt
Bien sûr que vous pouvez, mais pas de cette façon. Utilisez-vous DbContext ou ObjectContext? Les choses sont un peu différentes. Vous devriez lire sur le chargement impatient, le chargement paresseux et le chargement explciit. Cela dépend aussi de votre modèle. Y a-t-il une relation entre le site et les siteloggers? Quel genre de relation. Il y a beaucoup d'informations manquantes pour donner une réponse complète – JotaBe
Salut. J'utilise DbContext. Oui, il y a une relation comme vous pouvez le voir dans les POCOs. Je ne suis pas un expert mais j'ai fait des recherches sur le chargement avide, paresseux et explicite. C'est pourquoi j'ai d'abord utilisé la méthode d'inclusion, car cela semblait une bonne idée de charger avec impatience les SiteLoggers, étant donné qu'il y en aura seulement 5 environ. – Matt