2017-08-18 4 views
1

je la configuration suivante dans l'entité:Entity Framework des variables de nidification

public class t_HT 
{ 
    public int UNID { get; set; } 

    public string Name { get; set; } 

    public ICollection<t_HTC> Comments { get; set; } 

} 

ET

public class t_HTC 
{ 
    public int UNID { get; set; } 

    public int HTID { get; set; } 

    [ForeignKey("HTID")] 
    public t_HT HT { get; set; } 

    public int CId { get; set; } 

    [ForeignKey("CId")] 
    public t_C C { get; set; } 
} 

ET

public class t_C 
{ 
    public int UNID { get; set; } 

    public string Name { get; set; } 

    public ICollection<t_HTC> Comments { get; set; } 
} 

Lorsque les relations sont les suivantes:

Beaucoup t_HTC à o ne t_HT

Un t_HT à beaucoup t_HTC

ET

Beaucoup t_HTC à un t_C

Un t_C à beaucoup t_HTC

Cette configuration fonctionne très bien et réalise ce que je dois.

Cependant, lors de l'interrogation en utilisant C# et Linq/Entity je peux faire ce qui suit:

var queryHt = context.ht.include(x => x.htc); 

ET

var queryC = context.c.include(x => x.htc); 

ou l'autre de ceux-ci reviendront un seul t_ht avec une liste imbriquée de t_htc OU une simple t_c avec une liste imbriquée de t_htc

Cependant, ce que je veux réaliser est:

un seul t_ht, avec une liste imbriquée de t_htc, puis pour t_htc d'inclure l'entrée correspondante dans t_c

Je sais que je peux y parvenir en effectuant une join qui rejoint queryC en queryHt mais cela semble un peu long à faire à ce sujet.

L'entité peut-elle réaliser ce que j'essaie de faire?

Veuillez noter que les noms de variables ont été ajustés pour les besoins de cette question, et que ce n'est pas le cas dans mon code actuel.

Répondre

1

Vous pouvez obtenir ce que vous voulez avec ceci:

var queryHt = context.ht.Include("htc.C"); 

ou avec le strong typed version:

var queryHt = context.ht.Include(x => x.htc.Select(y => y.C)); 

La forte version dactylographiée nécessite l'ajout using System.Data.Entity;.