web-dev-qa-db-ja.com

EntityFramework-接続文字列はどこにありますか?

Web.configから接続文字列を削除しましたが、Entity Frameworkはまだデータベースに接続しています!接続文字列はどこに設定されていますか?私のWebサイトのライブバージョンをライブデータベースにポイントする必要があるため、これは問題です。

20
Ian Warburton

これは、既存のデータベースに接続しようとするときに(構成しているように) "構成上の規約"の哲学で見つけた落とし穴です。

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") {}
    }
}

それが誰かを助けることを願っています;-)

16
Omri Gazitt

次のようなものが必要です。

<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を拡張するクラスの名前に置き換えます。

9
waz

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;") {}
    }
}  

接続をテストするだけで機能します。

4
Beto Nogueira

規約>設定、そうですか?

デフォルトでは、EF Code fistはローカルSQL Expressインスタンスにデータベースを作成します。

2
Nathan Craddock

私は同じ問題に直面し、web.configファイルで提案されているように、コンテキストdbの名前として接続文字列名を変更しただけで、すべてうまくいきました。

1
Mubashar Sajjad

App.Configを確認します。そこにも保存されます。

1
Chad Yeates

Entity Frameworkモード(edmxファイル)を右クリックし、[プロパティに移動]を選択します。そこに接続文字列が表示されます。

エンティティモデルが別のプロジェクトにある場合は、独自の設定ファイルに含まれている必要があります。

0
neebz

DbContextでコードファーストアプローチを使用している場合は、web.configにコンテキストクラス名と一致する名前の接続文字列を配置でき、問題なく機能します。

0
Alexander Taran