我目前正在开发一个 ASP.NET MVC 4 项目,该项目使用 Entity Framework 4.3 和 CodeFirst 方法,使用简单的 POCO 类。另外,我使用 SQL Server Express 作为开发数据库。
在构建了我的类并设置了连接字符串之后,我运行了我的项目,它为我生成了一个 SQL Server Express 数据库,没有任何问题。
但问题是我正在尝试部署到 AppHarbor 并且我遇到了连接字符串的问题。AppHarbor 要求您将 SQL Server 安装为“附加组件”并将连接字符串配置为具有一个别名,该别名会将其 Sequilizer 连接字符串注入您从 GitHub 推送的项目中。
这是他们有关其工作原理的文档:http: //support.appharbor.com/kb/add-ons/using-sequelizer
我相信我的所有这些设置都是正确的,但是我的应用程序读取连接字符串的方式似乎存在问题。
这是我在本地机器上使用的开发连接字符串:
<connectionStrings>
<add name="DefaultConnection"
connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-FranchiseManager-201275154247;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
AppHarbor Sequilizer 连接字符串如下所示:
<connectionStrings>
<add
name="DefaultConnection"
connectionString="Server=0691298f-d461-40cc-86d6-a089016ba88d.sqlserver.sequelizer.com;Database=<removed hash value>;User ID=<removed hash value>;Password=<removed hash value>;"
providerName="System.Data.SqlClient"
/>
</connectionStrings>
第一个连接 - 由我的 EF 在本地生成 - 工作得很好。第二个 - 由 Sequilizer 创建 - 没有被我的应用程序读取。
但是 - 我可以通过 SQL Server Management Studio 连接到 Sequilizer 数据库。 所以它一定是我的应用程序吧?
为了解决我到 AppHarbor 的部署问题,我将它们的连接字符串硬编码到我的应用程序中,而不是由 EF 自动生成并在我的本地机器上测试的连接字符串。
这是我所做的:
- 用提供的 AppHarbor 替换了 Web.config 中的连接字符串,
- 清洗溶液,
- 重建解决方案
但是当我运行应用程序时,它仍在使用 EF 生成的原始数据库——这一定意味着它仍在读取旧的连接字符串。
似乎更改连接字符串是不够的。为了替换连接字符串,我还应该更改我的应用程序中的哪些内容?
任何建议表示赞赏 - 谢谢!
编辑
这是我的 DbContext 类:
public class FranchiseManagerContext : DbContext
{
public DbSet<FranchiseSet> FranchiseSets { get; set; }
public DbSet<Franchise> Franchises { get; set; }
}
这适用于名为“DefaultConnection”的连接字符串。
在这种情况下,EF 如何知道将 DbContext 与连接字符串匹配,但如果您更改字符串的名称,它就无法做到这一点?
更新
我想我从这个 SO 答案中知道它现在是 什么: SQL Server 连接字符串中的“初始目录”有什么意义?
看起来 Initial Catalog 属性指定了在 Entity Framework 首次启动时要使用的特定数据库。