ASP.NET MVC - 从SQL Server Express切换到Compact Edition - 连接问题

时间:2012-07-10 20:51:39

标签: asp.net-mvc entity-framework sql-server-ce connection-string appharbor

我有一个ASP.NET MVC 4项目 - CodeFirst with Entity Framework - 连接到由EF生成的SQL Server Express数据库,它工作得很好。

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

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

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

我决定在 App_Data 文件夹中创建一个FranchiseManagerData.sdf文件,并修改我的连接字符串和应用设置以匹配他们的文件。这是我的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.

看起来正在发生的事情是应用程序仍在寻找由Entity Framework生成的旧数据库,其名称为: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>

1 个答案:

答案 0 :(得分:4)

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

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

<强>更新

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