我有一个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>
答案 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。