无法找到请求的.Net Framework数据提供程序。程序(SqlClient)

时间:2013-03-04 15:46:01

标签: c# sql-server asp.net-mvc visual-studio entity-framework

我正在尝试使用数据库首次从SQL Server迁移(2005)来设置一个简单的ASP.NET MVC 4 webapp。我在数据库中创建了表,并使用Entity Framework在代码中创建了对象。我可以使用这些对象访问数据。

当我尝试使用Global.asax.cs文件中的WebSecurity.InitializeDatabaseConnection("FLMREntities", "UserProfile", "UserId", "UserName", true);初始化WebSecurity时出现问题。我已经尝试使用模板附带的InitializeSimpleMembershipAttribute过滤器并遇到了同样的问题。我收到错误消息:

Unable to find the requested .Net Framework Data Provider. It may not be installed.

以下是相关的连接字符串:

<add name="FLMREntities"
     connectionString="metadata=res://*/Models.FLMR.csdl|res://*/Models.FLMR.ssdl|res://*/Models.FLMR.msl;
                    provider=System.Data.SqlClient;
                    provider connection string=&quot;data source=notes.marietta.edu;
                        initial catalog=muskwater;
                        user id=muskwater;password=********;
                        MultipleActiveResultSets=True;
                        App=EntityFramework&quot;" 
     providerName="System.Data.EntityClient" />

另外,我在数据库中创建了成员资格表,以匹配模板创建的内容。如果我将Initialize调用中的最后一个参数更改为false(这样它不会尝试自动创建表),则返回它无法找到UserProfile表。我也尝试过名称的变体,例如[dbo]。[UserProfile]。

我所需要的只是拥有一个简单的帐户模型,以允许用户登录并允许某些用户查看更多内容。

3 个答案:

答案 0 :(得分:4)

我有类似的问题,我做了什么: 我修改了默认连接。我已经有了edmx模型的连接字符串,如下所示:

<add name="ChemicalReporterEntities" connectionString="metadata=res://*/ChemicalDB.csdl|res://*/ChemicalDB.ssdl|res://*/ChemicalDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLExpress;initial catalog=ChemicalReporter;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

但我不能将它与SimpleMemebrship提供商一起使用。所以在Visual Studio中我打开了Server Explorer&gt;数据连接,我选择了我的连接,右键单击,属性,我从那里复制了连接字符串并将其粘贴到defaultConnection:

<add name="DefaultConnection" connectionString="Data Source=.\SQLExpress;Initial Catalog=ChemicalReporter;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework" providerName="System.Data.SqlClient" />

之后我更改了WebSecurity.InitializeDatabaseConnection以使用DefaultConnection。

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", true);

答案 1 :(得分:1)

这可能是this的重复。

根据我对此问题的记忆,您需要确保已注册sqldata提供程序。有时,在你的machine.config中有一个你需要删除的重复条目,如果我没记错的话,你可能需要删除一个错误的条目。看看this msdn post,这个信息大约是页面的一半。

指向其他SO的链接有一些可能有用的链接。如果最终没有被标记为重复的问题,我也可以在这里添加它们或者做任何正确的事情。

您正在寻找的部分与我想的相似:

<system.data>
  <DbProviderFactories>
    <add name="SqlClient Data Provider"
     invariant="System.Data.SqlClient" 
     description=".Net Framework Data Provider for SqlServer" 
     type="System.Data.SqlClient.SqlClientFactory, System.Data, 
     Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
    />
  </DbProviderFactories>
</system.data>

根据您在评论中提供的信息,您的machine.config中似乎缺少此信息。除非我错了(可能),否则意味着SQL Provider未在您的计算机上注册。您需要将以上部分添加到web.config中。您还需要确保在项目中引用System.Data.SqlClient。

如果您的目标计算机上未安装此功能,则需要完成更多工作。我希望我可以帮助你更多,但是当我这样做时,它适用于SqlServerCE,所以我使用的文件有很大不同。

祝你好运!

编辑: 关键信息是版本需要匹配您正在使用的文件。在type =“blabh..blah..blah..Version = 2.0.0.0,blah blah”中,它需要是您正在使用的文件的版本,因此请右键单击您的文件并获取文件版本。如果失败,请尝试版本的变体。我相信我的文件是2.0.0.1但版本= 2.0是我工作时的工作。只需根据您的版本号(例如2.0,2.0.0,2.0.0.1)尝试几个不同的版本。

答案 2 :(得分:0)

我只是想在这里讨论,我有这个问题,通过查看我的machine.config来获取我在...中运行的目标.NET版本:

        

确保您的目标数据提供程序在其中正确输入,每个提供程序只有一个(我看到重复项会导致问题),并确保它是有效的XML,并且您只有一个DBProviderFactories条目。在我的情况下,我在初始条目之后有一个条目(基本上是两个条目,一个与我的提供者,一个空白),并且空白是导致所有问题。

希望这可以帮助有同样问题的人:)