ASP.NET MVC 3 - Не удается найти запрошенный поставщик данных .Net Framework

Фоновая информация:

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

Дополнительная информация:

  • Мне нравится С#, Postgres, Rails (поэтому MVC и веб-приложения для меня не новы)
  • У меня есть нет опыт работы с ASP.NET или SQL Server

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

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

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

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

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

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

Я думаю, что SQL-Server не был установлен, поэтому я установил его из Visual-Studio Express ISO, получил ошибку, после чего выполнил ремонт из ISO, и он утверждал, что все 15 пунктов, включая SQL Server Express repair &.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"/>

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

Вопрос:

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

Ответ 1

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

<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 в какой-то момент, но пока это, по крайней мере, поможет вам продолжить работу с учебником.

Ответ 3

Если вы посмотрите на конфигурацию, вы увидите, что установка 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.)

Ответ 4

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

Ответ 6

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

Ответ 7

  • Перед добавлением контроллера убедитесь, что вы создали. Если это не работает...
  • Создайте новый проект, создайте новую базу данных сервера sql вручную и посмотрите, можете ли вы подключиться к нему. Если нет, то проблема действительно в вашей конфигурации сервера sql на вашем компьютере. Вы можете попробовать перейти к postgres, просто убедитесь, что поставщик, который вы выбрали, сначала поддерживает EF-код.

Ответ 8

Что я сделал, чтобы преодолеть первую проблему, которую я ввел в Web.config код:

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

Примечание. Я создаю базу данных SQL CE 4, поэтому .sdf и не .mdf

Затем вы должны получить другие ошибки соединения на странице/Фильмы, поэтому замените приведенный выше код на:

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

И все должно быть хорошо.

Ответ 9

У меня был сервер. Он запускал обновления для Windows. И сообщение, ожидающее перезагрузки, было открыто. После перезагрузки он снова работал.

Ответ 11

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

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

Ответ 12

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

Ответ 13

Попробуйте следующее:

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