none
Héritage d'entité RRS feed

  • Question

  • Bonjour à tous, 

    Je rencontre un problème au niveau de la définition de mon Modèle lorsque je fais de l'héritage.

    Prenons un exemple avec 3 entités :

    Personne (Classe Abstraite) : ID, Nom, Prénom

    Client, qui hérite de Personne : TotalAchat

    Fournisseur, qui hérite de Personne: Adresse

     

    On a donc une classe mère et deux classes filles. 

     

    Mon problème vient du fait que dans mon DAL je n'arrive à gérer que des Personne.

    Je voudrais avoir une méthode comme ça :

    public static int AddClient(Client client)
    {
        using (ModelContainer model = new ModelContainer())
        {
            try
    	{
    	     model.Client.AddObject(client);
    	     model.SaveChanges();
    	     model.Detach(client);
    	     return client.ID ;
    	}
    	catch (Exception em){}
        }
    }


    Et l'équivalent avec tout le CRUD sur le Client.

    Mais je n'ai pas de model.Client, il n'y a pas de jeu d'entités Clients, au lieu de ça je n'ai que celui de Personne dans le ModelContainer.

    Comment puis-je faire pour ajouter facilement un objet des classes filles ? 

    En Java avec JPA je sais qu'il y a plusieurs stratégies d'héritage, utilisant par exemple une colonne discriminateur, mais existe t-il un équivalent avec Entity Framework ?


    • Modifié Yohan D dimanche 29 janvier 2012 09:00
    dimanche 29 janvier 2012 08:59

Réponses

  • Finalement j'ai pu régler mon problème moi-même. 

    Le type est directement géré. 

    En fait le problème se posait principalement pour un Get, mais j'ai appris que les propriétés correspondant aux jeux d'entités possèdent une méthode OfType<T>()

    Cela donne avec l'exemple précédent :

    using (ModelContainer model = new ModelContainer())
    {
        clients = (from client in model.Personne.OfType<Client>()	
                       where client.ID == Id
                       select client).FirstOrDefault();
    }    
    


     

    • Marqué comme réponse Yohan D dimanche 29 janvier 2012 18:05
    dimanche 29 janvier 2012 18:04

Toutes les réponses