2

我有一个 ASP.NET MVC 4 项目——带有实体框架的 CodeFirst——它连接到由 EF 生成的 SQL Server Express 数据库,并且运行良好。

但是,我正在尝试部署到 AppHarbor,并且在连接我的应用程序时运行的 SQL 版本存在一些问题。

所以,我注意到他们有一个使用 SQL Server Compact Edition 4 的示例项目。这是该项目的 web.config 文件: https://github.com/friism/CodeFirstMigrations/blob/master/Web/Web。配置

此外,我在 Microsoft 的 ASP.NET 站点上找到了有关如何在项目中包含 SQL Server CE 数据库的教程: http ://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store -第 4 部分

我决定FranchiseManagerData.sdf在我的App_Data文件夹中创建一个文件并修改我的连接字符串和应用程序设置以匹配他们的。这是我的 Web.config 的样子:

<appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>

  <connectionStrings>
    <add name="FranchiseManagerEntities"
         connectionString="Data Source=|DataDirectory|FranchiseManagerData.sdf"
         providerName="System.Data.SqlServerCe.4.0"/>
  </connectionStrings>

当我运行我的应用程序时,我收到一个 DataException 错误,上面写着: The underlying provider failed on Open.

看起来正在发生的事情是应用程序仍在寻找由实体框架生成的旧数据库,该数据库具有以下名称: FranchiseManagerTest.Models.FranchiseManagerContext- EF 在我的数据上下文类之后命名它。

这是停止调试后显示的错误:

 Cannot open database "FranchiseManagerTest.Models.FranchiseManagerContext" requested by the login. The login failed.
Login failed for user 'COMPANY\UserName'.

我已经尝试清理和重建解决方案。此外,我已经删除了 bin 文件夹的内容并再次进行了干净的重建,但是,它似乎仍在寻找旧的数据库连接。

我究竟做错了什么?如何让我的项目查找我创建的本地 SQL Server CE 数据库而不是以前的数据库?

如果我需要提供任何进一步的细节,请告诉我。

提前致谢。


编辑

这是我的 Web.config 文件的 System.Web 部分的一部分:

<compilation debug="true" targetFramework="4.0" />
<customErrors mode="Off"></customErrors>
<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
4

1 回答 1

4

FormsAuthentication 默认情况下不能使用 Sql CE(据我所知)。
我使用EJ 的 SQL Server Compact 4.0 ASP.NET Membership 提供程序没有任何问题。

此外,听起来您必须更新实体框架连接才能正确使用 SQL Server CE 数据库。

更新

从 .Net 4.5 开始,新的 SimpleMemembership Providers 和 Universl Providers 天真地支持 Sql CE。

于 2012-07-10T21:16:06.350 回答