Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème ObjectContext

    19 avril 2011 à 12:27:06

    Bonjour,

    Je suis en ce moment en stage et je dois tester un programme C# ( sachant que je connais peu le C# et que je n'ai pas participé au développement de ce programme).
    Le problème est que j'ai besoin de créer un objet ObjectContext, voici mon code:

    String connect="Server=./SQLExpress;AttachDbFilename=file:///D:/stage/bioinformatics_prototype/bioinformatics_prototype.Web/App_Data/Bioinformatics.mdf ;Trusted_Connection=Yes;";

    MetadataWorkspace workspace = new MetadataWorkspace(
    new string[] { "res://*/" },
    new Assembly[] { Assembly.GetExecutingAssembly() }
    );


    SqlConnection sqlConnection = new SqlConnection(connect);



    EntityConnection entityConnection = new EntityConnection(workspace, sqlConnection);




    ObjectContext ctx = new ObjectContext(entityConnection);

    int launched_id = 2;
    BioinformaticsEntities be = new BioinformaticsEntities();
    WorkflowLaunchedService wls = new WorkflowLaunchedService();
    Launched_Workflow lw = wls.GetLaunchedWorkflowGivenID(launched_id);
    ctx.ObjectStateManager.ChangeObjectState(lw, EntityState.Unchanged);
    wls.InsertLaunched_Workflow(lw);
    Assert.Equals(lw.EntityState, EntityState.Detached);



    J'utilise NUnit pour lancer les test et celui-ci me retourne:

    System.ArgumentException : EdmItemCollection doit être pré inscrit pour MetaDataWorkspace.

    J'ai testé plusieurs solution en modifiant Assembly[] mais rien n'y fait.

    merci.
    • Partager sur Facebook
    • Partager sur Twitter
      19 avril 2011 à 13:07:23

      Les 6 dernières lignes de code ne ressemblent pas à grand chose :o

      Tout le code qui précède sert à créer un ObjectContext pour interagir avec ta base. OK, mais... Tu ne t'en sers pas :euh: La seule chose que tu fais avec ce contexte c'est passer l'état d'une entité (apparemment issue d'un autre contexte) à "Unchanged", alors qu'(à priori) elle est déjà dans cet état puisqu'elle sort tout juste de la base.
      Ensuite tu refais une insertion de cette même entité. Dans quel but ? :o
      Et enfin à l'issue de ces opérations tu t'attends à ce que l'entité soit détachée de tout contexte... Je ne vois pas pourquoi ça serait le cas. o_O

      A vue de nez, la gestion du contexte est intégrée dans ta classe WorkflowLaunchedService, donc tu ne devrais pas créer d'autre contexte. Il faudrait qu'on en sache en peu plus sur ce que tu essaies de réaliser comme opération pour pouvoir t'aider: j'imagine que le but de ce code est de tester le comportement de cette classe WorkflowLaunchedService. Encore faut-il savoir exactement ce qu'elle est censée faire...
      • Partager sur Facebook
      • Partager sur Twitter
        19 avril 2011 à 13:39:10


        Merci pour ta réponse.
        En fait j’essaie de tester cette méthode:

        public void InsertLaunched_Workflow(Launched_Workflow launched_Workflow)
        {
        if ((launched_Workflow.EntityState != EntityState.Detached))
        {
        this.ObjectContext.ObjectStateManager.ChangeObjectState(launched_Workflow, EntityState.Added);
        }
        else
        {
        this.ObjectContext.Launched_Workflow.AddObject(launched_Workflow);
        this.ObjectContext.SaveChanges();
        }
        }


        Mais comme tu as pu le constater je suis perdu. En fait maintenant que j'y repense le test est mauvais mais je voulais d'abord régler le problème de ObjectContext avant de revoir mon test!!

        • Partager sur Facebook
        • Partager sur Twitter
          19 avril 2011 à 15:07:36

          Comme je le pensais, il n'y a aucune nécessité de créer un ObjectContext pour tester cette méthode. La gestion du contexte est intégrée à la classe WorkflowLaunchedService donc tu n'as pas à t'en soucier.

          Tout ce que tu dois faire c'est créer/obtenir une instance de Launched_Workflow, la transmettre à cette méthode, puis vérifier qu'elle a bien été insérée dans la base.
          Note que c'est plutôt inutile d'écrire un test pour une méthode qui se contente d'enchainer deux appels au framework; la seule subtilité ici qui vaut la peine d'être testée (et encore...), c'est que la méthode doit être capable de réinsérer (en dupliquant) une entité qui serait déjà issue de la base. Une façon d'écrire ce test, en supposant que la classe WorkflowLaunchedService expose une méthode GetLaunched_WorkflowCount() qui renvoie le nombre de Launched_Workflows de la base, serait la suivante:

          int launched_id = 2;
          WorkflowLaunchedService wls = new WorkflowLaunchedService();
          Launched_Workflow lw = wls.GetLaunchedWorkflowGivenID(launched_id);
          int nbrWorkflowsBefore = wms.GetLaunched_WorkflowCount();
          
          wls.InsertLaunched_Workflow(lw);
          
          Assert.Equals(lw.EntityState, EntityState.Unchanged);
          int nbrWorkflowsAfter = wms.GetLaunched_WorkflowCount();
          Assert.Equals(nbrWorkflowsAfter, nbrWorkflowsBefore + 1);
          

          • Partager sur Facebook
          • Partager sur Twitter

          Problème ObjectContext

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown