【问题标题】:Unable to find the requested .Net Framework Data Provider. (SqlClient)找不到请求的 .Net Framework 数据提供程序。 (SqlClient)
【发布时间】:2013-02-18 18:25:48
【问题描述】:

我正在尝试使用来自 SQL Server (2005) 的 DB first 迁移来设置一个简单的 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]。

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

【问题讨论】:

  • 您的连接字符串前是否有&lt;clear/&gt;?防止您从其他配置继承任何内容
  • 我在这个项目中没有其他连接字符串。我从模板中注释掉了那个。我还需要&lt;clear/&gt; 吗?它会和上面的嵌套级别相同吗?
  • 机器/站点范围的配置都可以将连接字符串添加到您的应用程序。一些框架也是如此。 &lt;clear/&gt; 应该是与连接字符串相同的部分中的第一个元素(加载配置部分时会保留顺序)。

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


【解决方案1】:

我遇到了类似的问题,我做了什么: 我修改了默认连接。我已经有了 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 中,我打开了服务器资源管理器 > 数据连接,我选择了我的连接,右键单击,属性,然后我从那里复制了连接字符串并将其粘贴到 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);

【讨论】:

    【解决方案2】:

    这可能与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>
    

    根据您在 cmets 中提供的信息,您的 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 但 Version=2.0 是我这样做的时候起作用的。只需根据您的版本号尝试几个不同的版本(例如 2.0、2.0.0、2.0.0.1)。

    【讨论】:

    • 那个问题的答案并没有解释如何解决这个问题。我找到了 machine.config 文件,并且只有 SqlServerCe 的 DbProviderFactory 条目。我需要为 SqlClient 添加一个条目吗?它会和你发布的一样吗?
    • 除非您知道自己在做什么,否则我不会修改 machine.config。让我看看能否找到我遇到此问题时使用的资源,以便您有更好的想法。
    • 另外,仅供参考,当我遇到与您完全相同的错误时(它是在运行时),这就是解决方案。我必须确保部署正确的文件,并且必须将我列出的部分添加到我的 web.config 中。
    • 我设法使用this article 解决了这个问题,主要是通过安装 System.Web.Providers。
    【解决方案3】:

    只是想在这里插话,我遇到了这个问题,通过查看我的 machine.config 来查找我正在运行的目标 .NET 版本......在结构中:

    确保您的目标数据提供者在其中正确输入,每个提供者只有一个(我看到重复会导致问题),并确保它是有效的 XML,并且您只有一个 DBProviderFactories 条目。在我的例子中,我在最初的条目之后有一个条目(基本上是两个条目,一个是我的提供者,一个是空白的),而空白是导致所有问题的原因。

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

    【讨论】:

      猜你喜欢
      • 2012-06-06
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 1970-01-01
      • 2013-07-05
      相关资源
      最近更新 更多