ASP.NET MVC 3 - Невозможно найти запрошенный поставщик данных .Net Framework - PullRequest
55 голосов
/ 28 июня 2011

Справочная информация:

Я использую Microsoft Visual Web Developer 2010 Express.
Информация о моем (нехватке) опыте: проблемапроизошло в первом уроке, который я пытаюсь проработать.

Некоторая дополнительная информация:

  • Мне комфортно с C #, Postgres, Rails (так что MVC и веб-приложения для меня не новы)
  • I нет опыта работы с ASP.NET или SQL Server

Описание проблемы:

Я пытаюсьв точности следуя инструкциям «Введение в ASP.NET MVC 3» , и я столкнулся с проблемой на первом шаге из части 5 - Добавление MoviesController:

Когда я пытаюсь добавить «MoviesController» с точными настройками, показанными в руководстве, и нажимаю «Добавить», я получаю следующую ошибку:

«Невозможнополучить метаданные для MvcMovie.Models.Movie. Невозможно найти запрошенный поставщик данных .Net Framework. Возможно, он не установлен. "

Google дал массу результатов при поискедля фразы «Невозможно найти запрошенный поставщик данных .Net Framework», но пока проблема не решена.

Что я пробовал:

Я думаю, что SQL-сервер не был установлен, поэтому я установил его из Visual-Studio Express ISO-я получил сообщение об ошибке, после чего я выполнил восстановление из ISO, и он заявил, что все 15 пунктов, включая восстановление SQL Server Express и .NET 4 Framework, прошли успешно.

Я запустил The_.NET_Framework_Setup_Verification_Tool, который успешно завершилсяЗа все.http://blogs.msdn.com/b/astebner/archive/2008/10/13/8999004.aspx

После упомянутой (пере) установки и восстановления я заново создал проект и выполнил каждый шаг, как описано в руководстве, и получил ту же ошибку.

Я обнаружил, что мне нужно искать DbProviderFactories в machine.config,

В файле root-Web.config проекта есть следующие записи

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

Конфигурация моей машины-file имеет только одну запись 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>

, тогда я нашел следующую цитату

"мы изменили способ, которым DbProviderFactories.GetFactoryClasses () определяет поставщиков каркасов в VS2010.Они больше не перечислены в файле machine.config. "

из http://social.msdn.microsoft.com/Forums/en-ZA/adodotnetdataproviders/thread/d79129c4-ae05-4c45-8997-bd90f5765a3a

Вопрос:

Так что, возможно, это неправильное направление, и, поскольку я понятия не имею, что делать дальше, какие шаги я должен предпринять, чтобы исследовать и решить эту проблему?
Кстати.Я установил postgres, поэтому если бы вместо SQL-сервера было бы удобнее использовать postgres, дайте мне знать.Для моих собственных проектов я бы в любом случае хотел использовать другую БД (возможно, postgres), но сейчас я просто хотел бы иметь возможность успешно пройти первый и, казалось бы, простой урок, который я пробовал.

Ответы [ 13 ]

56 голосов
/ 29 июня 2011

У меня была такая же проблема, поэтому я заменил

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

со следующим

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

И этого достаточно, чтобы я продолжал работать. Я бы тоже со временем узнал, как заставить эти виды приложений работать с mysql в какой-то момент, но сейчас это должно, по крайней мере, помочь вам продолжить обучение.

42 голосов
/ 13 июля 2011

Вам необходимо установить Microsoft SQL Server Compact 4.0 .

7 голосов
/ 28 июня 2011

Если вы посмотрите на конфигурацию, вы увидите, что установка SQL Server была красной селедкой;

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

SqlServerCE, боюсь, не полноценный SQL Server, а SQL Server Compact Edition . Я бы подумал, что это будет установлено с VS Express, однако вы можете скачать конкретные установщики с здесь

На самом деле у меня были установлены и SQLServerCE, и Express, но в учебнике использовалась версия Compact Edition: Один шаг в части 4 урока состоит в явном добавлении цитируемой вами части в файл Web.config. Так что это намеренно является частью web.config.

Но удаление этой части из web.config позволяет добавить контроллер так, как это описано в руководстве. Хотя это больше не означает точно после урока, для меня это нормально. (Это приводит к созданию базы данных MvcMovie.Models.MovieDBContext в SQL Server Express.)

1 голос
/ 28 апреля 2012

Я изменил свой SQL providerName = "System.Data.SqlClient" в web.config, поскольку в моей системе установлен клиент SQL, а также компакт SQL.

1 голос
/ 23 февраля 2012

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

Re: Невозможно получить метаданные для * Невозможно найти запрошенный поставщик данных .Net Framework .... 08.08.2011 19:44 | LINK

Я установил Microsoft SQL Server Compact 4.0, и это устранило проблему для меня.http://www.microsoft.com/download/en/details.aspx?id=17876

1 голос
/ 22 ноября 2011

Перестройка проекта не отлавливает ошибки конфигурации в разделе DBContext ... процесс сборки не проходит через соединения, так что вы можете строить весь день и при этом бомбить.Как предложено выше, исправьте конфигурацию так, чтобы строка подключения соответствовала MachineName / SQLInstanceName / DBName с правильной конфигурацией SQL.Работал просто отлично, просто изменив мой web.config в моем решении.

0 голосов
/ 06 мая 2013

Попробуйте это:

<add name="MovieDBContext"
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|Movies.sdf;User Instance=true"
     providerName="System.Data.SqlClient" />
0 голосов
/ 21 марта 2013

После прочтения других дискуссий в Интернете я нашел другой метод. Если вы не добавите строку подключения до тех пор, пока не создадите класс контроллера, он также будет работать. Это похоже на ошибку.

0 голосов
/ 08 марта 2013

Это сработало для меня, надеюсь, это поможет

<add name="MovieDBContext"
     connectionString="Data Source=(local);Initial Catalog=Movies; Integrated Security=true;"    providerName="System.Data.SqlClient" />
</connectionStrings>
0 голосов
/ 08 марта 2013

Установите Microsoft SQL Server Compact 4.0.Ссылка для того же - http://www.microsoft.com/en-us/download/details.aspx?id=17876

...