Bonjour à tous,
J'utilise Entity Framework avec l'approche code first et j'ai un problème lors de la récupération d'une collection d'entité avec plusieurs niveaux de dépendance.
Par exemple, j'ai une classe Client, qui contient une référence vers une classe Address et qui elle même a une référence vers la classe Country.
Voici ces classes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
 
    public interface IBaseEntity
    {
        int? Id { get; set; }
        DateTime? Versioning { get; set; }
 
    }
 
    public class BaseEntity : IBaseEntity
    {
        [Key]
        [Column("Id")]
        public int? Id { get; set; }
 
 
        [ConcurrencyCheck]
        [Column("Versioning")]
        public DateTime? Versioning { get; set; }
    }
 
 
 
    [Table("countries")]
    public class Country : BaseEntity
    {
 
        [MaxLength(64)]
        [Column("Name")]
        public string Name { get; set; }
 
        [MaxLength(2)]
        [Column("Code")]
        public string Code { get; set; }
    }
 
 
 
    [Table("addresses")]
    public partial class Address : BaseEntity
    {
        #region Propriétés de table
 
        [Column("LineOne")]
        [MaxLength(256)]
        public string LineOne { get; set; }
 
        [Column("LineTwo")]
        [MaxLength(256)]
        public string LineTwo { get; set; }
 
        [Column("PostalCode")]
        [MaxLength(16)]
        public string PostalCode { get; set; }
 
        [Column("City")]
        [MaxLength(64)]
        public string City { get; set; }
 
        [Column("country_id")]
        public int? CountryId { get; set; }
        #endregion
 
 
        #region Propriétés de navigation
        [ForeignKey("CountryId")]
        public virtual Country Country { get; set; }
        #endregion
    }
 
 
 
    [Table("clients")]
    public partial class Client :BaseEntity
    {        
        [MaxLength(32)]
        [Column("Name")]
        public string Name { get; set; }
 
 
        [Column("address_id")]
        public int? AddressId { get; set; }
 
 
        [ForeignKey("AddressId")]
        public virtual Address Address { get; set; }

Lorsque je récupère la collection de mes clients, j'utilise une méthode de mon Repository générique qui me permet de faire des Includes multiples :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
        public IQueryable<T> IncludeMultiple<T>(params Expression<Func<T, object>>[] includes) where T : class, IBaseEntity
        {
            var query = All<T>();
            if (includes == null)
                throw new Exception("Erreur lors de l'execution de la methode IncludeMultipe");
 
            query = includes.Aggregate(query,
                        (current, include) => current.Include(include));
 
            return query;
        }
Je fais appel à cette méthode dans ma couche de service comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
        public ObservableCollection<Client> AllWithDependancy()
        {
            using (var repository = new Repository())
            {
                var query = new List<Client>();
                return new ObservableCollection<Client>(repository.IncludeMultiple<Client>(c => c.Address, c => c.Address.Country));
            }
        }
Le problème c'est que je n'arrive pas à récupérer les pays dépendants des adresses. Les Includes ont l'air de marcher que sur un seul niveau (ou alors je m'y suis mal pris).

Je suis désolé pour la longueur de mon poste, j'espère que ça ne va pas vous décourager à me lire. En tout cas merci pour ceux qui auront pris la peine de lire et merci d'avance pour votre aide !