web-dev-qa-db-ja.com

Entity Framework:コンテキストは、EDMXファイルから生成されたコードでCode Firstモードで使用されています

私はEF 6データベースファーストアプローチでWPFアプリケーションを開発していますが、ソリューションに1つのプロジェクトがあります。プロジェクトを実行すると、このエラーが常に表示されます。

コンテキストは、Database FirstまたはModel First開発のいずれかのEDMXファイルから生成されたコードでCode Firstモードで使用されています。これは正しく機能しません。この問題を解決するには、この例外をスローするコード行を削除しないでください。 Database FirstまたはModel Firstを使用する場合は、Entity Framework接続文字列がスタートアッププロジェクトのapp.configまたはweb.configに含まれていることを確認してください。独自のDbConnectionを作成する場合は、それがEntityConnectionであり、他の種類のDbConnectionではないこと、およびDbConnectionを取得するベースDbContextコンストラクターの1つに渡すことを確認してください。 Code First、Database First、Model Firstの詳細については、Entity Frameworkのドキュメントを参照してください: http://go.Microsoft.com/fwlink/?LinkId=394715

15
Munjani375

私の間違いは、コンストラクタで標準の接続文字列を使用していた

Server = test\test; Database = DB; User Id = test_user;Password = test)、

ただし、Entity Frameworkには異なる形式が必要です

metadata=res://*/DBModel.csdl|res://*/DBModel.ssdl|res://*/DBModel.msl;provider=System.Data.SqlClient;provider connection string="data source=test\test;initial catalog=DB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework""" providerName = ""System.Data.EntityClient

編集:コードをコードとしてフォーマットするように変更し、読みやすくしました。

13
Stepan Tripal

EFは、接続文字列内のメタデータセクションの有無に基づいて仮定を行います。このエラーを受け取った場合、設定ファイルの接続文字列にメタデータセクションを追加できます。

例えば。接続文字列が次のような場合:

    <add name="MyModel" connectionString="data source=SERVER\INSTANCE;initial catalog=MyModel;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;を先頭に追加して、次のようにします。

<add name="MyModel" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;data source=SERVER\INSTANCE;initial catalog=MyModel;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
10
Daniel de Zwaan

できることの1つは...(データベースが最初の場合)

.edmx [図]->右クリック->「データベースからモデルを更新」を開きます

そして、「追加」、「更新」、「削除」タブが表示されるかどうかを確認します。

表示されない場合は、おそらく接続が切断されており、VSのダイアログで新しい接続文字列が作成されます。 =)

3
Rafael Ribeiro

とても遅いですが、まだ役に立ちます。私は同様の問題に巻き込まれました。 SOについての質問を投稿し、解決策を見つけることができました。 C#Web Apiの接続文字列エラー を参照できます。私の状況では、2つの接続文字列がありましたweb.configで(リンクにアクセスすると理由がわかります。)1つの文字列をコメントするとエラーが発生し、もう1つの文字列をコメントするとエラーが発生します。

「AccountController」タイプのコントローラーを作成しようとしたときにエラーが発生しました。コントローラーにパラメーターなしのパブリックコンストラクターがあることを確認してください。

私がしたこと:最初の接続文字列をDefaultConnectionと名付け、ApplicationDbContextクラスコンストラクターでこのDefaultConnectionを指定しました。これで、AccountControllerはこの接続文字列を使用し、他のすべてのコントローラーは2番目の接続文字列を使用します。これで私の問題が解決しました。

1
Harry .Naeem

生成された接続文字列を使用しないでください。ソリューションにすべてのメタデータファイルが含まれるようになりました。代わりに、 connection stringapp.configセクションで使用してみてください。

"data source=localhost\sqlexpress; initial catalog=sample; integrated security=True;MultipleActiveResultSets=True;"
1
Mozgovoy Artem

私には2つのプロジェクトがあります:

1つは、生成されたEDMXファイルとすべての関連モデル用です。

もう1つはASP.NET MVC Webです。

ASP.NET MVC Webプロジェクトで使用している接続文字列は、ADO.NET接続を使用して使用する通常の文字列であるため、この問題が発生しました。だから私は次のことをしました:

  • EDMXプロジェクトファイルでapp.configを開きます。

  • 接続文字列をコピーします。

  • これをアプリケーションの起動時に使用するため、WEBプロジェクトに貼り付けます。

0
Willy David Jr

私もこれとまったく同じメッセージに直面しましたが、Web MVCプロジェクトで働いています。このメッセージは、インポートしたモデルからコントローラーを自動生成しようとすると発生します。 「それはEDMXファイルから生成された」ため、動作していないようです。

良いニュースは、「EF Designer」ではなく「Code First」に基づいてモデルを生成すれば機能することです。悪いニュースは、自動コントローラー生成が機能するようにしたい場合、EF Designerを使用できないことです。これらの2つの方法のどちらでモデルを生成してもかまいません。モデルが生成されたら、同じ方法で使用します。

プロジェクトからすべてのemdxオブジェクトを削除し、EF DesignerではなくCode Firstに基づいてモデルを再作成しようとします。私のために働いた!

0
danilocgsilva