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

Framework .NET Discussion :

[Entity Framework] Fonction pour SELECT avec un héritage de classe


Sujet :

Framework .NET

  1. #1
    Invité
    Invité(e)
    Par défaut [Entity Framework] Fonction pour SELECT avec un héritage de classe
    Bonjour à tous,

    J'essaie de faire un "truc simple" avec EF et je bloque bêtement.

    Dans ma base SQL Server, j'ai deux tables reliées par une relation 1-0..1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TableA            TableB
    ID         1-0..1 ID_TableA
    Nom               Details
    boolFiltre        ...
    ...
    Bien sûr, ID et ID_TableA sont des clés primaires.

    Dans mon modèle EF, j'ai fait hériter ma classe TableB de ma classe TableA, et ça fonctionne bien.

    Maintenant, j'ai une procédure dans ma base qui me permet de faire un SELECT * FROM TableA WHERE (...), avec plein de conditions. L'idée était: "si ligne correspondante dans TableB existe, alors True, sinon prendre la valeur boolFiltre".
    Cette requête me donne bien les résultats que j'attends.


    Le problème est lors du mappage de cette fonction dans mon modèle EF: j'ai mappé cette procédure en une fonction qui me renvoie des classes "TableA" (la classe mère).
    Et lors de l'appel de cette fonction, j'ai une erreur:
    Tous les objets de l'EntitySet « DataContext.TableASet » doivent avoir des clés primaires uniques. Toutefois, une instance de type « Core.TableA » et une instance de type « Core.TableB » ont la même valeur de clé primaire, « EntitySet=TableASet;ID=1f8de4d0-ede6-43f0-9d14-2e9549618d51 ».
    Quelqu'un sait comment éviter ça ?
    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Je me réponds, parce que j'ai compris où était l'erreur... mais j'ai pas compris en quoi c'est une erreur!

    Concrêtement, je développe une application ASP.NET.
    Par soucis de cohérence de codage, j'ai placé mon DataContext dans une propriété en lecture seule de ma masterpage:
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Private objDataContext As Core.DataContext
        Public ReadOnly Property DataContext() As Core.DataContext
            Get
                If objDataContext Is Nothing Then objDataContext = New Core.DataContext
                Return objDataContext
            End Get
        End Property
    Je ne saurais pas dire si cette méthode est judicieuse ou aberrante, j'ai simplement supposé que ne pas multiplier les DataContext au gré de mes besoins me ferait faire une petite économie de mémoire.

    Dans la masterpage elle-même, je fais déjà appel à ce DataContext pour afficher différentes infos, et notamment des objets de la TableB.

    C'est en utilisant ce DataContext que l'erreur apparaît (ma SP me retournant des objets de la TableA). En revanche, en instanciant "à la main" un nouveau DataContext dans ma page, je n'ai pas de problèmes.

    ...reste que je sais comment éviter mon erreur, mais je ne comprends pas pourquoi c'est une erreur ?!

Discussions similaires

  1. Réponses: 18
    Dernier message: 17/07/2014, 14h13
  2. Debut en Entity framework : aide pour requete
    Par Sidart dans le forum Entity Framework
    Réponses: 2
    Dernier message: 05/05/2010, 00h20
  3. fonction pour filtrage avec des combobox en cascade
    Par Montor dans le forum Contribuez
    Réponses: 3
    Dernier message: 09/11/2009, 12h05
  4. [Entity Framework] Insertion de donnée avec LINQ to Entities
    Par Leelith dans le forum Framework .NET
    Réponses: 15
    Dernier message: 05/11/2009, 22h56
  5. [Smarty] convertir une simple fonction pour réutiliser avec Smarty
    Par yaz1234 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 06/11/2008, 15h16

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