web-dev-qa-db-fra.com

Impossible de compiler le projet après avoir importé une procédure stockée

Après avoir importé une procédure stockée dans mon modèle de données, le projet a cessé de compiler.

Cela continue à me donner des erreurs: 

The best overloaded method match for 
'System.Data.Entity.Core.Objects.ObjectContext.ExecuteFunction<TicketDataModel.sp_get_orphanjobgrades1_Result>
(string, params System.Data.Entity.Core.Objects.ObjectParameter[])' 
has some invalid arguments  C:\Users\nikolaev\Documents\MySoft\TicketManager-06 11 2013\TicketManager\TicketDataModel\TicketDataModel\TicketEntities.Context.cs 105 20  TicketDataModel

et 

`Argument 3: cannot convert from 'System.Data.Objects.ObjectParameter' to 
'System.Data.Entity.Core.Objects.ObjectParameter'   
 C:\Users\nikolaev\Documents\MySoft\TicketManager-06 11 2013\TicketManager\TicketDataModel\TicketDataModel\TicketEntities.Context.cs    79  143 TicketDataModel`

Le code dans context.cs est le suivant:

public virtual ObjectResult<sp_get_orphanjobgrades1_Result> sp_get_orphanjobgrades1(Nullable<System.DateTime> start_date, Nullable<System.DateTime> end_date)
{
            var start_dateParameter = start_date.HasValue ?
                new ObjectParameter("start_date", start_date) :
                new ObjectParameter("start_date", typeof(System.DateTime));

            var end_dateParameter = end_date.HasValue ?
                new ObjectParameter("end_date", end_date) :
                new ObjectParameter("end_date", typeof(System.DateTime));

            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<sp_get_orphanjobgrades1_Result>("sp_get_orphanjobgrades1", start_dateParameter, end_dateParameter);
}

J'ai lu que c'était peut-être à cause de EF 6 et qu'il fallait télécharger VS 2012 Update 1 et/ou EF 6 Tools pour VS 2012. J'ai téléchargé les outils et j'ai déjà la mise à jour 4 installée, mais cela ne change rien.

Pourquoi est-ce? 

14
AunAun

Le problème est que votre modèle ne sait rien des nouveaux paramètres. Je suppose que cela se produit lorsque votre modèle utilise EntityFramework (EF) version inférieure (5.0 par exemple), mais dans le code, vous essayez d'utiliser EF 6.0. 

Vous devez donc soit rétrograder votre code à EF 5.0, soit mettre à niveau votre modèle à 6.0.

Modèle de mise à niveau:

  1. Ouvrez Outils -> Gestionnaire de paquets NuGet -> Console du gestionnaire de paquets;
  2. Choisissez projet qui contient votre modèle en tant que projet par défaut dans la partie supérieure de De la console.
  3. Tapez "Uninstall-Package EntityFramework" et appuyez sur Entrée;
  4. Après la suppression, tapez "Install-Package EntityFramework -version 6.0.0" et appuyez à nouveau sur Entrée;
  5. Accédez à YourModelName.Context.cs et YourModelName.Context.tt et remplacez "à l'aide de System.Data.Objects; à l'aide de System.Data.Objects.DataClasses;" avec "en utilisant System.Data.Entity.Core.Objects;" . En outre, vous devrez peut-être rendre le Identique dans tous les fichiers, où ce problème apparaît.

Ou vous pouvez rétrograder la version EF utilisée dans votre code. Pour cela, vous devriez faire la même chose dans les 3 premières étapes, mais dans la quatrième, remplacez "-version 6.0.0" par "-version 5.0.0" . La 5ème étape n'est pas nécessaire pour cela.

52
Alex Yagur

Pour résoudre ce problème:

Si la version est en conflit, installez le package pour la version respective de EF.

Si la version est identique, modifiez l'espace de nom ci-dessus en System.Data.Entity.Core.Objects 

3
Ankit Agrawal

Vous pouvez télécharger de nouvelles versions dans msdn.

  1. Télécharger les outils pour Entity Framework 6.1.0 ou les nouvelles versions Dans http://www.Microsoft.com/en-us/download/details.aspx?id=40762
  2. Utilisation dans Package Manager Console Install-Package EntityFramework - version 6.1.0 et entrez
  3. Redémarrez votre studio visuel. 4. Vérifiez votre gestionnaire de paquets et terminez.
2
user3628261

Je veux juste ajouter que cela m'est arrivé après le démarrage d'un tout nouveau projet. Le problème était que j'avais créé un nouveau projet, puis procédé à la mise à jour de Entity Framework, ASP.Net MVC et d'autres packages via le gestionnaire de packages NuGet. Ainsi, le code généré pour mon projet ne correspond plus à ce que j'avais installé. 

La solution la plus rapide pour moi consistait simplement à créer un nouveau projet car je n'avais encore effectué aucun travail réel. J'espère que cela aide quelqu'un d'autre là-bas.

1
Trunker

Ma situation était un nouveau projet et je suis allé à Nuget avec Install-Package EntityFramework qui a installé la version 6.0, mais apparemment mon projet était déjà configuré avec une version antérieure? Vous ne savez pas comment, peut-être le projet par défaut de MVC 4.0 ...

Donc, je devais faire un EntityFramework Unforce-Package -force suivi par Install-Package EntityFramework -version 5.0.0 

Tout a fonctionné après ça.

1
John Peters