InitializeDatabaseConnection 方法文档说我们可以将 MVC 4“Internet”模板生成的成员资格功能与 SQLCE(SQL Server Compact 4.0 本地数据库)一起使用。
我以前使用过这个模板很多次,当我没有摆弄任何东西并简单地使用我们第一次注册用户时由实体框架生成的 localDb (默认)时,从来没有遇到过问题。
我的要求是获取默认生成到 2012 localDb 数据库中的成员表,而不是生成到 SQLCE 数据库中。但是,我得到以下信息:
异常:找不到请求的 .Net Framework 数据提供程序。它可能没有安装。
为此,我们只需:
- 打开 Visual Studio(快速工作正常)。
- 生成一个新的MVC4 --> Internet (with account) 项目。
- 将 SQLCE 数据库添加到
~/App_Data/
文件夹(右键单击文件夹并选择添加 --> SQL Server Compact 4.0 本地数据库)。 - 添加表,然后将记录添加到表中。
- 右键单击Models文件夹并选择Add --> ADO.NET Entity Data Model
- 打开(根)web.config 并复制“连接字符串”的名称(
<add name="ceEntities"
) - 在类中找到以下代码行
~/Filters/InitializeSimpleMembershipAttribute
:WebSecurity.InitializeDatabaseConnection("ceEntities", "UserProfile", "UserId", "UserName", autoCreateTables: true);
- F5 编译/运行/调试项目
- 主页/索引页面加载后,单击右上角的“注册”链接
- 输入用户名和密码进行注册,然后单击“确定”。
到目前为止,代码编译并运行良好,但是当在~/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 数据提供程序。它可能没有安装。