1

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

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

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

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

为此,我们只需:

  1. 打开 Visual Studio(快速工作正常)。
  2. 生成一个新的MVC4 --> Internet (with account) 项目。
  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/InitializeSimpleMembershipAttributeWebSecurity.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 数据提供程序。它可能没有安装。

4

2 回答 2

5

感谢 Scott Hanselman 以及在他的Introducing System.Web.Providers - ASP.NET Universal Providers for Session, Membership, Roles and User Profile on SQL Compact 和 SQL Azure 博客文章Scott中让他了解 SQLCE 协议的成员提供者概述了实现 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 默认值了!

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

于 2013-04-28T19:34:48.043 回答
0

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

于 2013-04-28T12:57:04.727 回答