私は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
私の間違いは、コンストラクタで標準の接続文字列を使用していた
(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
)
編集:コードをコードとしてフォーマットするように変更し、読みやすくしました。
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" />
できることの1つは...(データベースが最初の場合)
.edmx [図]->右クリック->「データベースからモデルを更新」を開きます
そして、「追加」、「更新」、「削除」タブが表示されるかどうかを確認します。
表示されない場合は、おそらく接続が切断されており、VSのダイアログで新しい接続文字列が作成されます。 =)
とても遅いですが、まだ役に立ちます。私は同様の問題に巻き込まれました。 SOについての質問を投稿し、解決策を見つけることができました。 C#Web Apiの接続文字列エラー を参照できます。私の状況では、2つの接続文字列がありましたweb.configで(リンクにアクセスすると理由がわかります。)1つの文字列をコメントするとエラーが発生し、もう1つの文字列をコメントするとエラーが発生します。
「AccountController」タイプのコントローラーを作成しようとしたときにエラーが発生しました。コントローラーにパラメーターなしのパブリックコンストラクターがあることを確認してください。
私がしたこと:最初の接続文字列をDefaultConnectionと名付け、ApplicationDbContextクラスコンストラクターでこのDefaultConnectionを指定しました。これで、AccountControllerはこの接続文字列を使用し、他のすべてのコントローラーは2番目の接続文字列を使用します。これで私の問題が解決しました。
生成された接続文字列を使用しないでください。ソリューションにすべてのメタデータファイルが含まれるようになりました。代わりに、 connection string
のapp.config
セクションで使用してみてください。
"data source=localhost\sqlexpress; initial catalog=sample; integrated security=True;MultipleActiveResultSets=True;"
私には2つのプロジェクトがあります:
1つは、生成されたEDMXファイルとすべての関連モデル用です。
もう1つはASP.NET MVC Webです。
ASP.NET MVC Webプロジェクトで使用している接続文字列は、ADO.NET接続を使用して使用する通常の文字列であるため、この問題が発生しました。だから私は次のことをしました:
EDMXプロジェクトファイルでapp.configを開きます。
接続文字列をコピーします。
これをアプリケーションの起動時に使用するため、WEBプロジェクトに貼り付けます。
私もこれとまったく同じメッセージに直面しましたが、Web MVCプロジェクトで働いています。このメッセージは、インポートしたモデルからコントローラーを自動生成しようとすると発生します。 「それはEDMXファイルから生成された」ため、動作していないようです。
良いニュースは、「EF Designer」ではなく「Code First」に基づいてモデルを生成すれば機能することです。悪いニュースは、自動コントローラー生成が機能するようにしたい場合、EF Designerを使用できないことです。これらの2つの方法のどちらでモデルを生成してもかまいません。モデルが生成されたら、同じ方法で使用します。
プロジェクトからすべてのemdxオブジェクトを削除し、EF DesignerではなくCode Firstに基づいてモデルを再作成しようとします。私のために働いた!