私は現在、単純な POCO クラスを使用した CodeFirst アプローチで Entity Framework 4.3 を使用している ASP.NET MVC 4 プロジェクトに取り組んでいます。また、開発データベースとして SQL Server Express を使用しています。
クラスを構築して接続文字列を設定した後、プロジェクトを実行すると、問題なく SQL Server Express データベースが生成されました。
ただし、問題は、AppHarbor にデプロイしようとしていて、接続文字列に問題があることです。AppHarbor では、SQL Server を「アドオン」としてインストールし、GitHub からプッシュするプロジェクトに Sequilizer 接続文字列を挿入するエイリアスを持つように接続文字列を構成する必要があります。
これがどのように機能するかについてのドキュメントは次のとおりです。 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 によってローカルに生成された最初の接続は、問題なく動作します。2 番目 (Sequilizer によって作成されたもの) は、アプリケーションによって読み取られていません。
ただし、SQL Server Management Studio を介して Sequilizer データベースに接続できます。 だから、それは私のアプリである必要がありますか?
AppHarbor へのデプロイのトラブルシューティングを行うために、EF によって自動生成され、ローカル コンピューターでテストされた接続文字列ではなく、接続文字列をアプリにハードコーディングしました。
これが私がしたことです:
- Web.config の接続文字列を、提供された AppHarbor に置き換えました。
- 溶液を洗浄し、
- ソリューションの再構築
しかし、アプリケーションを実行すると、EF によって生成された元のデータベースがまだ使用されています。これは、古い接続文字列をまだ読み取っていることを意味しているに違いありません。
接続文字列を変更するだけでは不十分なようです。接続文字列を置き換えるには、アプリケーションで他に何を変更する必要がありますか?
どんなアドバイスでも大歓迎です - ありがとう!
編集
ここに私の DbContext クラスがあります:
public class FranchiseManagerContext : DbContext
{
public DbSet<FranchiseSet> FranchiseSets { get; set; }
public DbSet<Franchise> Franchises { get; set; }
}
これは、「DefaultConnection」という名前の接続文字列でそのまま機能します。
このシナリオで EF はどのようにして DbContext と接続文字列を一致させることができますか?しかし、文字列の名前を変更すると、EF はそれを行うことができないのでしょうか?
アップデート
このSOの回答から、それが今何であるかを知っていると思います: SQL Server接続文字列の「初期カタログ」のポイントは何ですか?
初期カタログ属性は、Entity Framework が最初に開始されたときに使用される特定のデータベースを指定しているようです。