【发布时间】:2013-04-28 04:22:33
【问题描述】:
InitializeDatabaseConnection Method documentation 表示我们可以将 MVC 4“Internet”模板生成的成员资格功能与 SQLCE(SQL Server Compact 4.0 本地数据库)一起使用。
我之前使用过这个模板很多次,当我没有摆弄任何东西并简单地使用我们第一次注册用户时由实体框架生成的 localDb(默认值)时,我从来没有遇到过问题。
我的要求是获取默认生成到 2012 localDb 数据库中的成员表,而不是生成到 SQLCE 数据库中。但是,我得到以下信息:
异常:找不到请求的 .Net Framework 数据提供程序。它可能没有安装。
为此,我们只需:
- 打开 Visual Studio(快速工作正常)。
- 生成一个新的 MVC4 --> Internet(有帐户)项目。
- 将 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 数据提供程序。它可能没有安装。
【问题讨论】:
-
Marc S,请停止编辑我的帖子。
标签: asp.net-mvc-4 asp.net-membership sql-server-ce entity-framework-5