none
Héritage Linq To Object RRS feed

  • Question

  • Bonjour à tous dans le cadre d'un projet sur lequel je travail je voudrai hériter d'un objet générer par Linq. Supposons que dans ma base de données j'ai une table Clients que je drag and drop sur mon fichier .dblm et j'ai un objet Clients qui mappe ma table Clients. J'ai des propriétés que je ne stocke pas dans ma table mais qui sont calculé à partir de valeurs dans Ma table alors pour pouvoir les Manipuler je crée une classe CustomClients qui hérite de ma classe Clients générée par Linq je définit alors les méthodes insert et delete et update comme suit :
     Class CustomClients:Clients
    {
      public void Insert()
        {

           DataClassesDataContext db= new DataClassesDataContext();
           db.Clients.InsertOnSubmit(this as Clients); 
         db.submitChange();

        }
    public void Delete()
        {

           DataClassesDataContext db= new DataClassesDataContext();
           db.Clients.Delete(this as Clients); 
     db.submitChange();

        }

    }
     A la compilation tout va bien mais lorsque j'exécute j'ai une exception de type NullReferenceException pourtant en debuggant mon code je vois bien que tous les objets sont instanciés mais au moments de l'appelle de la InsertOnSubmit ou de la méthode Delete une exception est levée. Quelqu'un pourrait-il me donner des indications pour résoudre ce problème j'ai eu à faire aussi la sérialisation de la classe CustomClients mais toujours le même soucis.
    Merci d'avance pour vos contributions
    Cordiakement;
    lundi 14 décembre 2009 23:04

Réponses

  • Bonjour,

    Ce genre d'héritage n'est pas supporté par Linq To SQL.
    Vos tables doivent être mappée à une classe, et cette classe que vous devez manipuler.
    L'héritage supporté par Linq To SQL et l'héritage avec une colonne discriminateur que vous declarez explicitement dans le mapping de Linq To SQL

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    mercredi 16 décembre 2009 21:07
    Modérateur

Toutes les réponses

  • Bonjour,

    Ce genre d'héritage n'est pas supporté par Linq To SQL.
    Vos tables doivent être mappée à une classe, et cette classe que vous devez manipuler.
    L'héritage supporté par Linq To SQL et l'héritage avec une colonne discriminateur que vous declarez explicitement dans le mapping de Linq To SQL

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    mercredi 16 décembre 2009 21:07
    Modérateur
  • Bonjour,
    En plus de ce qui Gilles, un objet de ce type est déjà lié à un contexte.
    Et un objet de ce type ne peut être lié qu'à un seul contexte.
    Donc l'utilisation du db=new contexte ne peut pas fonctionner.

    Patrici
    ptournay
    jeudi 14 janvier 2010 19:40
  • Bonjour,

    As tu trouvé une solution pour ton cas d'utilisation ?

    J'ai un objet TPersonne (ID, Nom, Prenom, DateNaissance). Ces champs persistent dans la base.

    Je veux lui créer une classe TDALPersonne, qui dérive de TPersonne et lui ajouter une propriété Age, qui calcule évidement l'age en dynamique, mais qui n'a aucune raison de persister.

    Je rencontre la même erreur, NullReferenceException, même en castant dans tous les sens, rien n'y fait. Est il possible de dériver une classe Linq ?

    Je vous remercie beaucoup.

    David

    vendredi 23 avril 2010 21:18
  • Bonjour, Certains scénarios d'héritage ne sont pas supporté dans Linq to SQL. Pouvez-vous m'envoyer un projet qui reproduirait le problème ? Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    lundi 26 avril 2010 11:46
    Modérateur
  • Bonjour,

    Effectivement, certains scénarios d'héritage ne sont pas possible dans Linq.

    Je suis passé par l'extension de la classe partielle afin d'agrémenter ma classe Linq.

    Merci beaucoup pour votre aide.

    David

    jeudi 6 mai 2010 04:54