Bonsoir,
Je suis sur un développement un peu particulier car j'aimerais pouvoir charger un objet depuis une base de données avec EF Core et le compléter en fonction des besoins.
Un petit exemple de code valant mieux qu'un long discours, voici mon code de base :
Code C# : 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 public class MonObjetDeDB { public int ID { get; set; } // Clé primaire public int MonAutreObjetDBID { get; set; } public MonAutreObjetDB MonAutreObjetDB { get; set; } public MonObjetDeDB Load(MonContext monContext) { MonAutreObjetDB = monContext.MonAutreObjetDBs.Find(MonAutreObjetDBID); return this; } } public class MonAutreObjetDB { public int ID { get; set; } // Clé primaire public ICollection<MonObjetDeDB> MonObjetDeDBs { get; set; } = new HashSet<MonObjetDeDB>(); } public class MonContext : DbContext { public DbSet<MonObjetDeDB> MonObjetDeDBs { get; set; } public DbSet<MonAutreObjetDB> MonAutreObjetDBs { get; set; } }
Maintenant j'aimerais pouvoir charger mon objet en 2 étapes :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 using var ctx = new MonContext(); var MonObjetDeDB = ctx.MonObjetDeDBs.Find(1); MonObjetDeDB = MonObjetDeDB.Load(ctx)
Je veux faire cela en 2 étapes car c'est un objet qui est centrale dans ma base de données avec beaucoup de relations et selon ce que je veux faire, je fais plein de fois des requêtes similaires mais avec des Include légèrement différents. L'idée est de charger à la volée que ce qui est nécessaire.
Mais je n'ai pas envie de développer une fonction Load par lien et je me demandais s'il n'y avait pas un moyen générique de le faire, un peu comme dans l'idée du Include(obj => obj.MyProperty), par exemple avec une fonction Extend(MonContext monContext, Expression<Func<TS, TD>> navigationPropertyPath) ou en utilisant un peu de réflexion... Mais je ne sais pas par quel bout le prendre...
Quelqu'un aurait-il une idée ?
Merci
Partager