Web.configから接続文字列を削除しましたが、Entity Frameworkはまだデータベースに接続しています!接続文字列はどこに設定されていますか?私のWebサイトのライブバージョンをライブデータベースにポイントする必要があるため、これは問題です。
これは、既存のデータベースに接続しようとするときに(構成しているように) "構成上の規約"の哲学で見つけた落とし穴です。
DbContextクラス(Northwindなど)が名前空間(MvcProjectなど)にある場合、何らかの理由で、EFはクラスの名前をweb.configの接続文字列「Northwind」(または「MvcProject.Northwind」)と一致させません。 、それから、 "MvcProject.Northwind"と呼ばれるデータベースで、ローカルSQLEXPRESSインスタンスをデフォルトとする接続文字列を作成します。これは空のデータベースになります。そして、正しいDBに接続されていないことに気付くまで、データが返されない理由を理解しようと頭を悩ませます。
これを回避する方法(エレガントではありませんが、修正するために見つけた最も速い方法です):web.configの接続文字列の名前でベースを呼び出すコンストラクターをDbContextクラスに追加します。
namespace MvcProject
{
public class Northwind : DbContext
{
public Northwind() : base("Northwind") {}
}
}
それが誰かを助けることを願っています;-)
次のようなものが必要です。
<configuration>
<connectionStrings>
<add name="MyContext"
connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=YourDatabaseName"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
または、データベースが存在する場合はApp_Data
フォルダ:
<configuration>
<connectionStrings>
<add name="MyContext"
connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|YourDatabaseFilename.mdf;User Instance=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
MyContext
を、DbContext
を拡張するクラスの名前に置き換えます。
EFは接続を見つけることができませんでしたが、base()で接続文字列を使用しました:
namespace MvcProject
{
public class Northwind : DbContext
{
public Northwind() :
base("Data Source=servername;Initial Catalog=database;User ID=yourID;Password=yourPass;Trusted_Connection=False;") {}
}
}
接続をテストするだけで機能します。
規約>設定、そうですか?
デフォルトでは、EF Code fistはローカルSQL Expressインスタンスにデータベースを作成します。
私は同じ問題に直面し、web.configファイルで提案されているように、コンテキストdbの名前として接続文字列名を変更しただけで、すべてうまくいきました。
App.Configを確認します。そこにも保存されます。
Entity Frameworkモード(edmxファイル)を右クリックし、[プロパティに移動]を選択します。そこに接続文字列が表示されます。
エンティティモデルが別のプロジェクトにある場合は、独自の設定ファイルに含まれている必要があります。
DbContextでコードファーストアプローチを使用している場合は、web.configにコンテキストクラス名と一致する名前の接続文字列を配置でき、問題なく機能します。