【问题标题】:MVC4 - Membership - SQL Server Compact 4.0 - Exception: Unable to find the requested .Net Framework Data ProviderMVC4 - 成员资格 - SQL Server Compact 4.0 - 异常:找不到请求的 .Net Framework 数据提供程序
【发布时间】:2013-04-28 04:22:33
【问题描述】:

InitializeDatabaseConnection Method documentation 表示我们可以将 MVC 4“Internet”模板生成的成员资格功能与 SQLCE(SQL Server Compact 4.0 本地数据库)一起使用。

我之前使用过这个模板很多次,当我没有摆弄任何东西并简单地使用我们第一次注册用户时由实体框架生成的 localDb(默认值)时,我从来没有遇到过问题。

我的要求是获取默认生成到 2012 localDb 数据库中的成员表,而不是生成到 SQLCE 数据库中。但是,我得到以下信息:

异常:找不到请求的 .Net Framework 数据提供程序。它可能没有安装。

为此,我们只需:

  1. 打开 Visual Studio(快速工作正常)。
  2. 生成一个新的 MVC4 --> Internet(有帐户)项目。
  3. 将 SQLCE 数据库添加到 ~/App_Data/ 文件夹(右键单击该文件夹并选择添加 --> SQL Server Compact 4.0 本地数据库)。
  4. 添加表,然后向表中添加一条记录。
  5. 右键单击 Models 文件夹并选择 Add --> ADO.NET Entity Data Model
  6. 打开(根)web.config 并复制“连接字符串”的名称(<add name="ceEntities"
  7. ~/Filters/InitializeSimpleMembershipAttribute 类中找到以下代码行:WebSecurity.InitializeDatabaseConnection("ceEntities", "UserProfile", "UserId", "UserName", autoCreateTables: true);
  8. F5 编译/运行/调试项目
  9. 主页/索引页面加载后,点击右上角的“注册”链接
  10. 输入用户名和密码进行注册,然后单击“确定”。

到目前为止,代码编译并运行良好,但是当以下代码行在 ~/Filters/InitializeSimpleMembershipAttribute 类中运行时:

WebSecurity.InitializeDatabaseConnection("ceEntities", "UserProfile", "UserId", "UserName", autoCreateTables: true);

这个异常被捕获: 找不到请求的 .Net Framework 数据提供程序。它可能没有安装。

当我们将此代码添加到 web.config 时,这显然已解决:

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="System.Data.SqlServerCe.4.0" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.4.0" />
      <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </DbProviderFactories>
  </system.data>

当我们再次运行它时,会捕获到以下异常:

找不到请求的 .Net Framework 数据提供程序。它可能没有安装。

【问题讨论】:

  • Marc S,请停止编辑我的帖子。

标签: asp.net-mvc-4 asp.net-membership sql-server-ce entity-framework-5


【解决方案1】:

感谢 Scott Hanselman 以及让他了解使用 SQLCE 协议的 Membership Provider 的人,正如在他的 Introducing System.Web.Providers - ASP.NET Universal Providers for Session, Membership, Roles and User Profile on SQL Compact and SQL Azure blog post 中,Scott 概述了实现 ASP.NET 的步骤通用提供商。这帮助了我,因为他概述了 SQLCE 的正确连接字符串大纲:

<connectionstrings>
   <add name="Sql_CE" 
        connectionstring="Data Source=|DataDirectory|\MyWebSite.sdf;" 
        providername="System.Data.SqlServerCe.4.0">
   </add>
</connectionstrings>

所以我将连接字符串更新为:

<connectionstrings>
   <add name="defaultconnection" 
        connectionstring="Data Source=|DataDirectory|\ce.sdf;" 
        providername="System.Data.SqlServerCe.4.0">
   </add>
</connectionstrings>

然后将connectionStringName~/Filters/InitializeSimpleMembershipAttribute 类更新回:

WebSecurity.InitializeDatabaseConnection("defaultconnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);

应用程序编译时没有出现错误或异常,因此我运行了应用程序,然后注册了一个用户,并在该过程中将适用的 SimpleMembership 表生成到我的“ce.sdf”(SQL Server Compact 4.0 本地数据库)中。

我现在可以充分利用 SimpleMembership 默认值了!

p.s.,为简洁起见,我现在将编辑我最初的帖子/问题以省略堆栈跟踪,只留下异常。

【讨论】:

  • 谢谢...等等不能只说谢谢...仅供参考;我需要connectionStringproviderName (pascalCase) 在我的情况下
【解决方案2】:

随机建议,但可能需要添加。作为命名空间到 web.config 文件或作为包文件中的包,我可能是错的

【讨论】:

  • 具体来说,您建议将什么命名空间添加到 web.config 中?
猜你喜欢
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多