ASP.NET MVC 3-找不到请求的.NET Framework数据提供程序
本文关键字:NET 数据 程序 Framework 请求 MVC 找不到 ASP | 更新日期: 2023-09-27 18:00:31
背景信息:
我正在使用Microsoft Visual Web Developer 2010学习版
关于我(缺乏)经验的信息:这个问题发生在我试图解决的第一个教程中。
一些附加信息:
- 我对C#、Postgres、Rails很熟悉(所以MVC和Web应用程序对我来说并不新鲜)
- 我没有使用ASP.NET或SQL Server的经验
问题描述:
我正试图完全按照"ASP.NET MVC 3简介"教程中的步骤进行操作,但在第5部分的第一步——添加MoviesController:时遇到了问题
当我试图添加具有教程中显示的确切设置的"MoviesController"并单击"添加"时,我会收到以下错误:
"无法检索的元数据MvcMovie.Models.Movie。无法查找请求的.Net Framework数据提供商可能未安装。"
谷歌在搜索短语"无法找到请求的.Net Framework数据提供商"时给出了大量结果,但到目前为止还没有解决这个问题。
我尝试过的:
我认为SQL Server没有安装,所以我从Visual Studio Express ISO安装了它-遇到一个错误,然后我从ISO运行了一个修复,它声称包括SQL Server Express修复在内的所有15点;。NET 4 Framework成功通过。
我已经运行了the_.NET_Framework_Setup_Verification_Tool,它成功地完成了所有操作。http://blogs.msdn.com/b/astebner/archive/2008/10/13/8999004.aspx
在上述(重新)安装&修复我重新创建了项目,并按照教程中描述的每一个步骤进行操作,结果出现了相同的错误。
我发现我应该在machine.config、中查找DbProviderFactory
项目的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 server是一个简单的解决方案,请告诉我。对于我自己的项目,我无论如何都想使用不同的DB(可能是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"/>
这足以让我继续工作。我最终也会学习如何使这些类型的应用程序在某个时候与mysql一起工作,但目前这至少应该有助于您继续学习教程。
您需要安装Microsoft SQL Server Compact 4.0。
如果您查看配置,您会发现安装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中删除这一部分可以按照教程中描述的方式添加控制器。虽然这意味着不再完全按照教程添加控制器,但对我来说没问题。(这将导致在SQL Server Express中创建MvcMovie.Models.MovieDBContext数据库。)
http://forums.asp.net/t/1679349.aspx/1CypressBender
回复:无法检索*的元数据无法找到请求的.Net Framework数据提供程序。。。。2011年8月8日下午07:44 |链接
我安装了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。
重建项目不会在DBContext部分捕获配置错误。。。构建过程不会经过连接,所以您可以整天构建,但仍然会爆炸。如上所述,修复配置,使连接字符串将MachineName/SQLInstanceName/DBName与正确的SQL配置匹配。只需在解决方案中修改web.config,就可以正常工作。
- 请确保在添加控制器之前进行了构建。如果不起作用
- 新建一个项目,手动创建一个新的sql server数据库,看看你是否可以连接到它。如果不能,那么问题确实出在你机器上的sql server配置中。您可以尝试postgres,只需确保您选择的提供商首先支持EF代码
我所做的是为了克服我在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" />
你应该没事的。
我有一台服务器。它运行了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>
在阅读了网上的其他讨论后,我找到了另一种方法。如果在创建控制器类之后才添加连接字符串,那么它也可以工作。这有点像一只虫子。
试试这个:
<add name="MovieDBContext"
connectionString="data source=.'SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|Movies.sdf;User Instance=true"
providerName="System.Data.SqlClient" />