IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Compléter un objet depuis une base de données avec EF Core


Sujet :

C#

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 185
    Points : 167
    Points
    167
    Par défaut Compléter un objet depuis une base de données avec EF Core
    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

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    Pourquoi ne pas simplement remonté l'autre donné et l'affecter à ton objet ?

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 185
    Points : 167
    Points
    167
    Par défaut
    Parce qu'il y a trop de liens avec la table centrale et que je n'ai pas forcément besoin de tout charger selon les traitements dont j'ai besoin.
    J'ai trouvé une solution palliative en mettant un GetMonObjet(MonContext ctx) et je vais récupérer ce dont j'ai besoin.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. connexion à une base de données avec l'objet dataview
    Par mademoizel dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 12/03/2007, 13h31
  2. [MySQL]Affichage d'image depuis une base de données
    Par Sofute dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 20/02/2007, 14h43
  3. Grouper les objets d'une base de données
    Par Daniel-Gérald dans le forum Access
    Réponses: 2
    Dernier message: 11/01/2007, 20h45
  4. Réponses: 8
    Dernier message: 29/09/2006, 12h08
  5. Liens depuis une base de donnée statique
    Par LucG dans le forum Access
    Réponses: 4
    Dernier message: 26/10/2005, 11h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo