262

エンティティ フレームワークと ASP.NET MVC 4 を使用してアプリケーションを構築しています

私のソリューションは 2 つのプロジェクトに分割されています。

  • データ モデル (.edmx) ファイルといくつかのカスタム インターフェイスを含むクラス ライブラリ
  • 上記のクラス ライブラリを参照する「コンテナ」MVC プロジェクト

私の問題は、「MyEntites」DbContextを使用しようとすると、次のエラーが発生することです。

アプリケーション構成ファイルに「MyEntities」という名前の接続文字列が見つかりませんでした。

この問題は、接続文字列が MVC プロジェクトではなくクラス ライブラリの app.config 内にあるという事実と関係があると思います。

誰か提案はありますか?

4

28 に答える 28

321

接続文字列を MVC プロジェクトの .config ファイルにコピーしてみてください。

于 2012-09-27T13:25:05.050 に答える
107

プロジェクトを(DbContextを使用して)スタートアップとして作成していることを確認してください

プロジェクトで右クリックして選択します

また

app.config (または web.config) で接続文字列をスタートアップとして設定されているプロジェクトに追加します。

また

このようにコマンドを呼び出します

Update-Database -Script -ProjectName '<project name>' -StartupProjectName '<project name>' -ConnectionString 'data source=.;initial catalog=<db name>;integrated security=True;MultipleActiveResultSets=True' -ConnectionProviderName 'System.Data.SqlClient'

その後、もう一度やり直してください

于 2016-02-08T22:03:11.427 に答える
34

接続文字列を渡すだけEntityFrameworkで、あなたの人生を続けることができます:

public partial class UtilityContext : DbContext
{
    static UtilityContext()
    {
        Database.SetInitializer<UtilityContext>(null);
    }

    public UtilityContext()
        : base("Data Source=SERVER;Initial Catalog=DATABASE;Persist Security Info=True;User ID=USERNAME;Password=PASSWORD;MultipleActiveResultSets=True")
    {
    }

    // DbSet, OnModelCreating, etc...
}
于 2013-10-04T19:53:46.237 に答える
9

ご想像のとおり、接続文字列がクラス ライブラリの app.config にあることに関係しています。

クラス app.config からコンテナのapp.configまたはweb.configファイルにエントリをコピーします。

于 2012-09-27T13:24:15.067 に答える
4

また、スタートアップ プロジェクトが接続文字列を持たないプロジェクトに変更された場合にも発生します。

  1. ソリューションの右クリック - プロパティをクリックします
  2. [共通プロパティ] で、スタートアップ プロジェクトを選択します。
  3. 右側のペインで、接続文字列を持つプロジェクトを選択します (ほとんどの場合、ソリューションを開始するプロジェクトである MVC プロジェクトになります)。
于 2015-11-27T16:09:04.757 に答える
3

ええ、それはばかげています。接続ビルダーを使用すると、接続文字列のコピーを回避できます。VB.Net コード (本番環境で使用されますが、ここでは少し変更されているため、テストされていないものとして扱い、問題があれば喜んで支援します)、serverName 変数、databaseName 変数があり、それらをメソッドに渡し、接続を生成します。私のため:

    Dim EfBuilder As New System.Data.EntityClient.EntityConnectionStringBuilder("metadata=res://*/VMware.VmEf.csdl|res://*/VMware.VmEf.ssdl|res://*/VMware.VmEf.msl;provider=System.Data.SqlClient;provider connection string=""data source=none;initial catalog=none;integrated security=True;multipleactiveresultsets=True;App=EntityFramework""")
   Dim SqlBuilder As New Data.SqlClient.SqlConnectionStringBuilder(EfBuilder.ProviderConnectionString)
                        SqlBuilder.DataSource = serverName
                        SqlBuilder.InitialCatalog = databaseName
                        EfBuilder.ProviderConnectionString = SqlBuilder.ConnectionString
                        Using vmCtx As New VmEfConn(EfBuilder.ConnectionString)
于 2014-03-01T08:56:42.343 に答える
2

ソリューションで複数のプロジェクトを使用していますか?

もしそうなら、あなたがチェックしなければならないWeb構成はde .edmxファイルと同じプロジェクトのものです

于 2012-09-27T13:25:50.603 に答える
2

これは、コンテキスト クラスが DbContext から継承されているためです。あなたのctorは次のようなものだと思います:

public MyEntities()
    : base("name=MyEntities")

name=...あなたのconnectionStringの名前に変更する必要があります

于 2019-10-05T06:14:33.857 に答える
0

この問題は、プロジェクトでレイヤーを使用していて、DataLayer でエンティティ フレームワークを定義またはインストールして、プロジェクトを実行しようとした場合に発生します。

したがって、この問題を解決するには、Edmx ファイルが存在するレイヤーから接続文字列をコピーし、その接続文字列をメインの web.config に貼り付けます。

于 2016-10-05T12:03:22.163 に答える
0

.edmx ファイルを含むプロジェクトによって生成された接続文字列は、接続文字列を生成します。これは、出力ディレクトリにコピーされ、ランタイム構成情報を格納するために実行可能ファイルによって参照された app.config 種類のファイルからのホールドオーバーのように見えます。

Web プロジェクトの web.config ファイルにランダムな .config 情報を追加する自動プロセスがないため、これは Web プロジェクトで中断します。

最も簡単なのは、接続文字列を構成ファイルから web.config ファイルの接続セクションにコピーし、構成ファイルの内容を無視することです。

于 2014-08-02T20:18:05.633 に答える
0

スタートアップ プロジェクトの ROOT web.config に接続文字列を配置したことを確認します。

ここで明白なことを述べていることは知っていますが、それは私にも起こりました-MVCプロジェクトのWeb.Configに接続文字列を既に持っていましたが(.edmxファイルは別のクラスライブラリプロジェクトに配置されていました)、できませんでしたなぜ例外が発生し続けるのかわかりません...簡単に言えば、接続文字列を間違って Views\Web.Config にコピーしました。疲れと下にスクロールしないという奇妙な組み合わせです。 -ソリューション エクスプローラーのシナリオ。ええ、これらのことはベテランの開発者にも起こります:)

于 2016-05-25T12:11:40.680 に答える
0

MVVM モデルを使用している場合は、接続文字列をプロジェクトのすべての部分にコピーしてみてください。

たとえば、ソリューションにクラス ライブラリ プロジェクトと wpf プロジェクトの 2 つのプロジェクトが含まれている場合、バックエンド プロジェクト (ライブラリ クラス プロジェクト) の接続文字列をコピーし、wpf プロジェクトの App.config ファイルにコピーを配置する必要があります。

<connectionStrings>
  <add name="DBEntities" ... />
</connectionStrings>

お役に立てば幸いです:)

于 2020-05-24T16:35:14.043 に答える
-2

Connectoinstrnig を web.config ファイルに追加します

<ConnectionStiring> <add name="dbName" Connectionstring=" include provider name too"  ></ConnectionStiring>
于 2014-08-02T20:09:22.913 に答える