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

Entity Framework Discussion :

[EF] Liste des entités disponibles


Sujet :

Entity Framework

  1. #1
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut [EF] Liste des entités disponibles
    Bonjour,

    Est-il possible dans Entity Framework 4.0 d'obtenir une liste de toutes les entités disponibles ? (enum p. ex.) Cela permettrait de ne pas mettre des strings en dur ou en constante dans des requêtes Linq to EDM...

    La solution de rechange serait de générer un fichier d'enum à partir du fichier .edmx en batch, mais c'est moyen...

    Merci d'avance de vos infos, a+

    Stéphane

  2. #2
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Euhhh t'aurais pas un bout de code cible pour l'utilisation de cette liste ?

    (Je ne comprend pas bien l’intérêt )

  3. #3
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    Hello,

    Voici un exemple de code ou un enum généré de ma part me rend bien service.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var l_lstDBmyEntity = from c in _context.myEntity.Include(modelEntitiesEnumeration.AnotherEntity.ToString()) where c.Entity.Id == _iEntityId orderby c.Time select c;
    Sans l'enum, ma requête Linq deviendrait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var l_lstDBmyEntity = from c in _context.myEntity.Include("AnotherEntity") where c.Entity.Id == _iEntityId orderby c.Time select c;
    Je n'aime pas du tout le nom de mon entité en dur dans le code... Ou alors il y a peut-être d'autres solutions avec le nouveau framework pour les "Include"...

    Merci d'avance !

  4. #4
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Cette possibilité (via l'utilisation d'une expression lambda) est incluse dans ce qui s'appelle Entity Framework Feature (actuellement en CTP4).
    http://blogs.msdn.com/b/adonet/archi...ouncement.aspx

    Tu peux par exemple faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var commentsWithPostAndBlog = context.Comments.Include(c => c.Post.Blog);
    C'est un exemple issu du post suivant:
    http://romiller.com/2010/07/14/ef-ct...e-with-lambda/
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  5. #5
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    En effet l'expression lambda est bien plus élégante et approprié

  6. #6
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    Effectivement... Je ne l'ai pas encore testé, mais j'adhère...

  7. #7
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    Je n'arrive pas à faire fonctionner cette expression lambda. Voici le code d'erreur :

    Cannot convert lambda expression to type 'string' because it is not a delegate type
    J'ai essayé d'ajouter des références, rien n'y fait...

    Quelqu'un a une idée ??

    Merci d'avance

  8. #8
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    Bonjour,

    J'ai effectué plusieurs requêtes en Linq to EDM, et c'est vraiment le top. Par contre je ne parviens toujours pas à intégrer ces "INNER JOIN", et le chargement de données directement dans mes requêtes Linq. Le framework le fait automatiquement par Lazy Loading, mais je n'aime qu'à moitié. Pas très performant...

    Y a-t-il une autre solution que les expressions lambdas, ou alors comment fonctionne-t-elles ??

    Merci d'avance, a+

  9. #9
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    Pour faire fonctionner les Include avec des lambdas expressions, il faut installer EF CTP4 comme ceci.

    Les requêtes SQL générées en background sont assez propres, tant qu'il n'y a pas des INNER JOIN de plusieurs niveaux.. Il faut dans ces cas faire des SUB-SELECT et ce n'est pas la solution la plus élégante et la plus performante.. On fait avec..

  10. #10
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    Je suis tombé sur un autre os... J'ai besoin de la méthode suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjectContext.AddObject()
    Cette méthode demande également le "entitySetName" en string, et je suis archi-contre. Le jour ou une table change de nom, c'est l'exception à coup sûr!

    Y a-t-il une autre solution du style "lambda-expression" pour cette fonctionnalité ?

    Merci d'avance, a+

  11. #11
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    L'entitySetName ne correpond pas forcément au nom de ta table. Tu le spécifies dans le designer. Derrière il y a un mapping entre ce nom et le nom de ta table.
    Si ta table change de nom (ce qui est quand même assez étonnant) tu auras juste à modifier le mapping au niveau de cet EntitySet dans le designer sans toucher le code.

    Le but d'EF est justement d'avoir une séparation entre le model de la base et le model objet dans ton appli.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

Discussions similaires

  1. Récupérer la liste des imprimantes disponibles
    Par Maluje dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 04/11/2008, 18h13
  2. "Clear" la liste des références disponibles dans l'IDE VB6
    Par zesamoth dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 07/05/2008, 10h48
  3. [FB2] Obtenir la liste des alias disponibles sur un host distant : est ce possible ?
    Par vennedra dans le forum Connexion aux bases de données
    Réponses: 3
    Dernier message: 30/04/2007, 10h06
  4. Liste des fonts disponibles
    Par jean dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 01/02/2007, 20h52
  5. [C# et RS232] Liste des ports disponibles sur le PC
    Par legillou dans le forum Windows Forms
    Réponses: 4
    Dernier message: 22/06/2006, 09h30

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