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 :

Constructeur surchargé d'une Entity


Sujet :

Entity Framework

  1. #1
    r83
    r83 est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 271
    Points : 86
    Points
    86
    Par défaut Constructeur surchargé d'une Entity
    Bonsoir,

    Pour chaque classe entity générée, je compte créer une classe partielle associée. par exemple Personne.cs et PersonneServices.cs
    Dans la classe de services j'ai voulu créer un constructeur . Est-ce possible ?

    Voici mes classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     public partial class Personne
        {
            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
            public Personne()
            {
                this.Voitures = new HashSet<Voiture>();
            }
     
            public decimal id { get; set; }
            public string nom { get; set; }
            public string prenom { get; set; }
     
            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
            public virtual ICollection<Voiture> Voitures { get; set; }
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     public partial class Voiture
        {
            public decimal id { get; set; }
            public string marque { get; set; }
            public decimal idPersonne { get; set; }
     
            public virtual Personne Personne { get; set; }
        }
    et mes classes de service :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      public partial class Personne
        {
            public Personne(int id, string nom, string prenom):this()
            {
                this.id=id;
                this.nom = nom;
                this.prenom = prenom;            
            }
            public override string ToString()
            {
                return this.id + " - " + this.nom + " - " + this.prenom;
            }
        }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public partial class Voiture
        {
            public Voiture(int id, string marque, int idPersonne)
            {
                this.id = id;
                this.marque = marque;
                this.idPersonne = idPersonne;
     
            }
            public override string ToString()
            {
                return "Voiture : " + this.id + " - " + this.marque;
            }
        }
    Voici le programme :

    Code : 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
    static void Main()
            {
                using (EntitiesHeritage contexteHeritage = new EntitiesHeritage())
                {
                    var req = from pers in contexteHeritage.Personnes
                              select pers;
                    var p= req.ToList();
                    foreach(var unePersonne in p)
                    {
                        Console.WriteLine(unePersonne);
                        foreach (var v in unePersonne.Voitures)
                        {
                            Console.WriteLine("\t" + v);
                        }
                    }
                }           
                Console.ReadKey();
            }
    Le programme se compile bien. mais à l'exécution j'ai ceci sur l'instruction foreach (var v in unePersonne.Voitures)
    "Une exception non gérée du type 'System.Reflection.TargetInvocationException' s'est produite dans EntityFramework.dll"

    Si je ne surcharge pas le constructeur, le programme s'exécute bien.
    Merci pour les explications et les solutions.

    Cordialement

  2. #2
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Salut,

    EntityFramework doit avoir un constructeur sans paramètre pour créer son objet.
    Par contre ton constructeur peut être privé car EntityFramework utilise la réflexion pour charger les données.
    Idem pour les setters de tes propriétés.

    Lien : Entity-framework-private-constructors-and-private-setters/

    Pour info :
    Julie Lerman a écrit la bible EF.

    Exemple :
    Code : 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
      public class AThingAsEntity
      {
        private AThingAsEntity(){}  //the private constructor
     
        public AThingAsEntity(string description, int anInt, string aString)
        {
          Description = description;
          SomeOtherThing = new SomeOtherThing(anInt, aString);
        }
     
        public int Id { get; private set; }
        public string Description { get; private set; }
        public SomeOtherThing SomeOtherThing { get; set; }
     
        public void TheOtherThingMustChange(int anInt, string aString)
        {
          SomeOtherThing = new SomeOtherThing(anInt, aString);
        }
      }

  3. #3
    r83
    r83 est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Merci beaucoup, en fait j'ai mis les constructeurs en internal et ça a marché.

    Cordialement

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

Discussions similaires

  1. Surcharge d'une commande
    Par trax44 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 4
    Dernier message: 17/01/2007, 14h12
  2. Surcharge d'une définition
    Par Madmac dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 24/10/2006, 01h02
  3. [MFC] Surcharge d'une méthode CListCtrl
    Par semenzato dans le forum MFC
    Réponses: 8
    Dernier message: 22/12/2005, 22h05
  4. [Jonas] Impossible de déployer une Entity Bean CMP2
    Par blockparty dans le forum JOnAS
    Réponses: 2
    Dernier message: 01/12/2005, 15h45
  5. Surcharge d'une procédure dans l'instance d'une frame
    Par damien.yep dans le forum Composants VCL
    Réponses: 3
    Dernier message: 14/09/2005, 15h28

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