none
Insertion d'un enfant en tant que parent RRS feed

  • Question

  • Bonjour,

    Disons que j'ai un site pour fabriquer des bonbons :p. L'utilisateur rentre des ingrédients et paf ça te crée la formule d'un bonbon qui sera envoyé à l'usine pour sa fabrication. Mais comme on est une entreprise de qualité, avant d'envoyer nos bonbons à l'usine on va vérifier leur teneur en sucre, graisse ...

    Pour cela j'ai crée une classe BonbonHelper qui hérite de bonbon pour lui ajouter des propriétés (en readonly) pour calculer ces différentes teneurs. On a donc :

    class Ingredient { public int Sucre {get; set;} public int Gras {get; set;} ... }

    class Bonbon { public IEnumerable<Ingredient> Ingredients {get; set;} }

    class BonbonHelper : Bonbon { public int TeneurSucre {
    get {
    if(!_TeneurSucre.HasValue)
    _TeneurSucre = (from ingr in Ingredients select ingr.Sucre).Sum();

                            return _TeneurSucre;                 } } private int? _TeneurSucre; ... }

    Une fois validé le bonbon peut être enregistré en base, pour cela j'ai une méthode générique :

    class Repisitory<TEntity> 
    where TEntity : class
    { BddContext context = new BddContext(); //Context de code first (héite de dbContext) function Insert(TEntity entity)  {     context.Set<TEntity>.Add(entity); } }

    Et pour l'utiliser, je voudrai donc faire ça :

    public void InsererBonbon(BonbonHelper bonbon) { 	
    	new Repisitory<Bonbon>().Insert((Bonbon) bonbon);
    }

    Sauf qu'il me sort une erreur

    Une exception de type 'System.InvalidOperationException' s'est produite dans EntityFramework.dll mais n'a pas été gérée dans le code utilisateur

    Informations supplémentaires : Mapping and metadata information could not be found for EntityType 'BonbonHelper'.

    Auriez-vous une idée ?

    P.S: évidemment la fabrique de bonbon est purement inventé, mais c'est bien plus fun que le domaine initial :)





    • Modifié Benjioe vendredi 17 juillet 2015 16:22
    vendredi 17 juillet 2015 16:20

Réponses

  • Bonjour,

    Hériter de Bonbon est à mon avis une mauvaise idée surtout que dans votre modèle, vous faites un calcul. Or dans l'approche POCO, votre entité ne doit pas avoir ce genre de méthode. (et en + comme vous utilisez EntityFramework, il cherche lui une table BonbonHelper).

    Donc il est préférable de créer une classe BonbonHelper qui hérite de Object (pas de Bonbon) avec une méthode GetTeneurSucre(Bonbon bonbon)


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    • Marqué comme réponse Benjioe vendredi 24 juillet 2015 15:30
    dimanche 19 juillet 2015 05:18

Toutes les réponses

  • Bonjour,

    Hériter de Bonbon est à mon avis une mauvaise idée surtout que dans votre modèle, vous faites un calcul. Or dans l'approche POCO, votre entité ne doit pas avoir ce genre de méthode. (et en + comme vous utilisez EntityFramework, il cherche lui une table BonbonHelper).

    Donc il est préférable de créer une classe BonbonHelper qui hérite de Object (pas de Bonbon) avec une méthode GetTeneurSucre(Bonbon bonbon)


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    • Marqué comme réponse Benjioe vendredi 24 juillet 2015 15:30
    dimanche 19 juillet 2015 05:18
  • Ok, merci beaucoup de votre réponse
    vendredi 24 juillet 2015 15:30