web-dev-qa-db-fra.com

ASP.NET MVC 3 - Impossible de trouver le fournisseur de données .Net Framework demandé

Contexte-info:

J'utilise Microsoft Visual Web Developer 2010 Express.
Information sur mon (manque) d'expérience: le problème est survenu dans le premier tutoriel que j'essaie de travailler.

Quelques informations supplémentaires:

  • Je suis à l'aise avec C #, Postgres, Rails (donc MVC & Web-apps ne sont pas nouveaux pour moi)
  • Je n'ai aucune expérience avec ASP.NET ou SQL Server

Description du problème:

J'essaie de suivre exactement les étapes du tutoriel "Intro to ASP.NET MVC 3" - et je rencontre un problème à la première étape de la partie 5 - Ajout le MoviesController:

Lorsque j'essaie d'ajouter le "MoviesController" avec les paramètres exacts qui sont affichés dans le didacticiel et cliquez sur "Ajouter", j'obtiens l'erreur suivante:

"Impossible de récupérer les métadonnées pour MvcMovie.Models.Movie. Impossible de trouver le fournisseur de données .Net Framework demandé. Il n'est peut-être pas installé."

Google a donné une tonne de résultats lors de la recherche de la phrase "Impossible de trouver le fournisseur de données .Net Framework demandé", mais rien n'a résolu le problème jusqu'à présent.

Ce que j'ai essayé:

Je pense que SQL-Server n'a pas été installé, je l'ai donc installé à partir de l'ISO de Visual-Studio Express - j'ai obtenu une erreur, puis j'ai exécuté une réparation à partir de l'ISO et il a affirmé que les 15 points, y compris la réparation de SQL Server Express et .NET 4 Framework a réussi.

J'ai exécuté The_.NET_Framework_Setup_Verification_Tool qui a réussi pour tout. http://blogs.msdn.com/b/astebner/archive/2008/10/13/8999004.aspx

Après la (ré) installation et la réparation mentionnées, j'ai recréé le projet et suivi chaque étape comme décrit dans le tutoriel et j'ai eu la même erreur.

J'ai trouvé que je devais rechercher DbProviderFactories dans machine.config,

Le root-Web.config du projet a les entrées suivantes

  <connectionStrings>
    <add name="MovieDBContext"
     connectionString="Data Source=|DataDirectory|Movies.sdf"
     providerName="System.Data.SqlServerCe.4.0"/>

Mon fichier de configuration de machine n'a qu'une seule entrée DbProviderFactories:

<DbProviderFactories>
<add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/></DbProviderFactories>

alors j'ai trouvé la citation suivante

"nous avons changé la façon dont DbProviderFactories.GetFactoryClasses () détermine les fournisseurs de framework dans VS2010. Ils ne sont plus répertoriés dans le fichier machine.config."

de http://social.msdn.Microsoft.com/Forums/en-ZA/adodotnetdataproviders/thread/d79129c4-ae05-4c45-8997-bd90f5765a3a

Question:

Alors peut-être que c'est la mauvaise direction et comme je ne sais pas quoi essayer ensuite, quelles mesures dois-je prendre pour enquêter et résoudre ce problème?
Btw. J'ai postgres installé, donc si utiliser postgres au lieu de SQL-server serait une solution facile, faites le moi savoir. Pour mes propres projets, je voudrais quand même utiliser une base de données différente (probablement des postgres), mais pour l'instant, je voudrais simplement pouvoir réussir le premier et apparemment simple tutoriel que j'ai essayé.

55
Jennifer Owens

J'avais le même problème donc j'ai remplacé

<add name="MovieDBContext"     connectionString="Data Source=|DataDirectory|Movies.sdf"
providerName="System.Data.SqlServerCe.4.0"/>

avec ce qui suit

<add name="MovieDBContext"
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;database=Movies;User ID=sa;password="
     providerName="System.Data.SqlClient"/>

Et cela a suffisamment fonctionné pour me permettre de continuer à travailler. Moi aussi, j'apprendrais finalement à faire fonctionner ce type d'applications avec mysql à un moment donné, mais pour l'instant cela devrait au moins vous aider à poursuivre le didacticiel.

56
fattyman

Vous devez installer Microsoft SQL Server Compact 4. .

42
saille

Si vous regardez la configuration, vous verrez que l'installation de SQL Server était un hareng rouge;

<add name="MovieDBContext"
 connectionString="Data Source=|DataDirectory|Movies.sdf"
 providerName="System.Data.SqlServerCe.4.0"/>

SqlServerCE n'est pas, je le crains, SQL Server complet, c'est SQL Server Compact Edition . J'aurais pensé que cela aurait été installé avec VS Express, mais vous pouvez télécharger les installateurs spécifiques à partir de ici

En fait, SQLServerCE et Express étaient installés, mais le didacticiel utilisait Compact Edition: ne étape dans la partie 4 du didacticiel consiste à ajouter explicitement la partie que vous avez citée au Web.config. C'est donc une partie du web.config par intention.

Mais la suppression de cette partie du web.config permet d'ajouter le Controller de la manière décrite dans le tutoriel. Bien que cela ne signifie plus exactement après le tutoriel, cela me convient. (Cela entraîne la création d'une base de données MvcMovie.Models.MovieDBContext dans SQL Server Express.)

7
blowdart

La reconstruction du projet n'attrapera pas les erreurs de configuration dans la section DBContext ... le processus de construction ne passe pas par les connexions, vous pouvez donc construire toute la journée et toujours bombarder. Comme suggéré ci-dessus, corrigez la configuration de sorte que la chaîne de connexion corresponde à MachineName/SQLInstanceName/DBName avec la configuration SQL correcte. A très bien fonctionné en modifiant simplement mon web.config dans ma solution.

1
Aaron Lee

J'ai changé mon SQL providerName = "System.Data.SqlClient" dans web.config, car j'ai un client SQL ainsi que SQL compact installé sur mon système.

1
vasu

http://forums.asp.net/t/1679349.aspx/1 CypressBender

Re: Impossible de récupérer les métadonnées pour * Impossible de trouver le fournisseur de données .Net Framework demandé ... 08 août 2011 19:44 | LINK

J'ai installé Microsoft SQL Server Compact 4.0 et cela a résolu le problème pour moi. http://www.Microsoft.com/download/en/details.aspx?id=17876

1
Alexis
  1. Assurez-vous que vous construisez avant d'ajouter le contrôleur. Si cela ne fonctionne pas ...
  2. Créez un nouveau projet, créez une nouvelle base de données SQL Server manuellement et voyez si vous pouvez vous y connecter. Sinon, le problème se situe en effet dans la configuration de votre serveur sql sur votre machine. Vous pouvez essayer d'aller dans postgres, assurez-vous d'abord que le fournisseur que vous choisissez prend en charge le code EF.
0
theoretical

Installez Microsoft SQL Server Compact 4.0. Le lien pour cela est - http://www.Microsoft.com/en-us/download/details.aspx?id=17876

Cela a fonctionné pour moi, j'espère que cela aide

<add name="MovieDBContext"
     connectionString="Data Source=(local);Initial Catalog=Movies; Integrated Security=true;"    providerName="System.Data.SqlClient" />
</connectionStrings>
0
user2149040

J'avais un serveur. Il a exécuté des mises à jour Windows. Et un message en attente de redémarrage était ouvert. Après le redémarrage, cela a de nouveau fonctionné.

0
Per G

Essaye ça:

<add name="MovieDBContext"
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|Movies.sdf;User Instance=true"
     providerName="System.Data.SqlClient" />

Après avoir lu d'autres discussions sur le Web, j'ai trouvé une autre méthode. Si vous n'ajoutez la chaîne de connexion qu'après avoir créé la classe de contrôleur, cela fonctionnera également. Cela ressemble à un bug.

0
Charaf JRA

Ce que j'ai fait était de surmonter le premier problème que j'ai mis dans Web.config le code:

 <add name="MovieDBContext"
     connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Movies.sdf;Integrated Security=True"
   providerName="System.Data.SqlClient"/>

Remarquez que je crée une base de données SQL CE 4, donc le .sdf et non le .mdf

Ensuite, vous devriez recevoir une autre erreur de connexion sur la page/Films, alors remplacez le code ci-dessus par:

<add name="MovieDBContext"
     connectionString="Data Source=|DataDirectory|\Movies.sdf;"
   providerName="System.Data.SqlServerCe.4.0"  />

Et ça devrait aller.

0
Jim