ASP.NET MVC 3 – 无法find所需的.Net Framework数据提供程序

背景信息:

我正在使用Microsoft Visual Web Developer 2010 Express。
关于我(缺乏)经验的信息:问题出现在我尝试通过的第一个教程中。

一些附加信息:

  • 我很熟悉C#,Postgres,Rails(所以MVC和Web应用程序对我来说并不陌生)
  • 没有使用ASP.NET或SQL Server的经验

问题描述:

我试图完全遵循从“介绍到ASP.NET MVC 3” -教程的步骤,我从第5部分的第一步遇到问题- 添加MoviesController:

当我试图添加教程中显示的确切设置的“MoviesController”,然后单击“添加”我得到以下错误:

“无法检索MvcMovie.Models.Movie的元数据, 无法find请求的.Net Framework数据提供程序 ,可能不会安装它。

Google在search短语“无法find所需的.Net Framework数据提供程序”时给出了大量的结果,但是到目前为止还没有任何解决方法。

我试过了:

我认为SQL-Server没有安装,所以我从Visual-Studio Express ISO安装它 – 得到了一个错误,然后我已经从ISO运行修复,它声称所有15点,包括SQL Server Express修复和.NET 4框架成功通过了。

我已经运行了一切成功的The_.NET_Framework_Setup_Verification_Tool。 http://blogs.msdn.com/b/astebner/archive/2008/10/13/8999004.aspx

提到(重新)安装和修复后,我重新创build项目,并遵循教程中所述的每一个步骤,并得到同样的错误。

我发现我应该在machine.config中寻找DbProviderFactories,

项目的root-Web.config具有以下条目

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

我的机器configuration文件只有一个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),但现在我只想通过我试过的第一个看似简单的教程成功。

我有同样的问题,所以我换了

 <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"/> 

它足够让我继续工作。 我也将最终学习如何使这些types的应用程序与MySQL的工作,但现在这至less应该帮助你继续教程。

您需要安装Microsoft SQL Server Compact 4.0 。

如果你看看configuration,你会看到安装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,但是教程使用了精简版: 本教程第4部分的一个步骤是明确地将引用的部分添加到Web.config中。 所以这是web.config的意图的一部分。

但是从web.config中删除这个部分可以按照教程描述的方式添加Controller。 虽然这意味着不再完全按照教程,这对我来说很好。 (这导致在SQL Server Express中创buildMvcMovie.Models.MovieDBContext数据库。)

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

回复:无法检索*的元数据无法find所需的.Net框架数据提供程序…. 08八月,2011 07:44下午| LINK

我安装了Microsoft SQL Server Compact 4.0,并为我解决了这个问题。 http://www.microsoft.com/download/en/details.aspx?id=17876

我在web.config中更改了我的SQL providerName =“System.Data.SqlClient”,因为我的SQL客户端以及SQL compact安装在我的系统上。

重build项目不会捕获DBContext部分中的configuration错误…构build过程不会经过连接,所以您可以整天构build并仍然popup。 如上所示,修复configuration,使连接string与正确的SQLconfiguration匹配MachineName / SQLInstanceName / DBName。 通过在我的解决scheme中修改我的web.config工作得很好。

  1. 确保在添加控制器之前构build。 如果这不起作用…
  2. 创build一个新的项目,手动创build一个新的SQL Server数据库,看看是否可以连接到它。 如果没有,那么问题确实在你的机器上的SQL Serverconfiguration。 你可以尝试去postgres,只要确保你select的提供者先支持EF代码即可。

我所做的是为了克服我在Web.config代码中的第一个问题:

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

注意我正在创buildSQL CE 4数据库,因此.sdf而不是.mdf

接下来,您应该在页面/电影上收到另一个连接错误,请将上面的代码replace为:

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

你应该没事的。

我有一台服务器。 它运行Windows更新。 等待重新启动的消息已打开。 重新启动后,再次工作。

安装Microsoft SQL Server Compact 4.0。 链接相同是 – http://www.microsoft.com/en-us/download/details.aspx?id=17876

这对我有用,希望它有帮助

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

在阅读围绕networking的其他讨论后,我发现了另一种方法。 如果在创build控制器类之前不添加连接string,那么它也可以工作。 它有点像一个错误。

尝试这个:

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