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

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

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

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

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

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

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

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

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

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

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

Я думаю, что SQL-Server не был установлен, поэтому я установил его из 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"/>

В конфигурационном файле моей машины есть только одна запись 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, поэтому, если использовать postgres вместо SQL-сервера, дайте мне знать. Для моих собственных проектов я все равно хотел бы использовать другую БД (возможно, postgres), но пока я просто хотел бы иметь возможность успешно пройти через первый и, казалось бы, простой учебник, который я пробовал.


person Jennifer Owens    schedule 28.06.2011    source источник
comment
Если бы все только так определили свои вопросы +1   -  person David Fox    schedule 28.06.2011
comment
спасибо, я ценю комментарий.   -  person Jennifer Owens    schedule 29.06.2011
comment
У меня была такая же проблема, я делал то же самое. Спасибо.   -  person Narnian    schedule 30.08.2012
comment
Попробуйте эту ссылку, это может помочь вам еще больше: stackoverflow.com/a/14354851/1983024   -  person Jon P    schedule 17.01.2013


Ответы (13)


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

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

person fattyman    schedule 28.06.2011
comment
Это неправильный способ решения проблемы. Это один из видов продвинутых работ. Правильный способ установки Microsoft SQL Server Compact 4.0. - person Saroop Trivedi; 21.10.2012
comment
Решение fattyman работает. @Saroop Триведи У меня уже установлен SQL server compact 4.0, но я все еще получаю указанную выше ошибку. - person DoodleKana; 19.03.2013
comment
Я наконец смог заставить его работать, используя исходную строку подключения, но добавив ссылку на System.Data.SqlServerCe (версия 4.0, а не 3.5). - person Justin; 31.05.2013
comment
Этот ответ может быть хорошим обходным путем, но, поскольку я испытал установку Windows Server Ce, она лучше подходит;) - person Guillaume Raymond; 09.05.2014

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

person saille    schedule 12.07.2011
comment
У меня это не сработало, у меня уже установлен Sql Server CE 4.0 - person smerlung; 19.11.2013

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

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

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

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

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

person blowdart    schedule 28.06.2011

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

Re: Невозможно получить метаданные для * Невозможно найти запрошенного поставщика данных .Net Framework .... 8 августа 2011 г., 19:44 | ССЫЛКА

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

person Alexis    schedule 22.02.2012

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

person vasu    schedule 27.04.2012

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

person Aaron Lee    schedule 21.11.2011

  1. Перед добавлением контроллера убедитесь, что вы выполняете сборку. Если это не сработает ...
  2. Создайте новый проект, создайте новую базу данных sql server вручную и посмотрите, сможете ли вы подключиться к ней. Если нет, то проблема действительно в конфигурации вашего сервера sql на вашем компьютере. Вы можете попробовать перейти на postgres, просто убедитесь, что выбранный вами провайдер поддерживает код EF.
person theoretical    schedule 28.06.2011

Что я сделал, так это для того, чтобы решить первую проблему, я поместил в 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"  />

И все должно быть в порядке.

person Jim    schedule 15.11.2012
comment
Что может быть строкой подключения для полной версии SQL Server? - person bonCodigo; 30.09.2014

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

person Per G    schedule 05.12.2012

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

person RedBottleSanitizer    schedule 07.03.2013

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

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

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

person Charaf JRA    schedule 21.03.2013

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

<add name="MovieDBContext"
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|Movies.sdf;User Instance=true"
     providerName="System.Data.SqlClient" />
person Mạnh Viết Đặng    schedule 06.05.2013