VS 2013 ProfessionalでMVC 5アプリケーションを作成し、最初にSQL Server Expressの既存のDBでEF 6.1コードを使用しました。ビューを作成しようとすると、「New scaffolded item ...」を使用し、「Entity Frameworkを使用して、ビュー付きのMVC 5コントローラー」を選択します。モデルとコンテキストクラスを選択し、[OK]をクリックします。その後、次のエラーメッセージが表示され、コードは作成されません。同じエラーでEF Power Toolsをアンインストールしました。
エラー
選択したコードジェネレーターの実行中にエラーが発生しました:「呼び出しのターゲットによって例外がスローされました。」
また、VS 2013とSQL Serverのアンインストール/再インストールも変更なしで試しました。
このエラーを引き起こす可能性のあるものについて他のアイデアはありますか?
私もこの問題を抱えていました。DBコンテキストでbase.onModelCreatingを呼び出すことで問題を解決しました
base.OnModelCreating(modelBuilder);
私の場合、Web.configから接続文字列を移動して
<connectionStrings configSource="ConnectionStrings.config"/>
それは、scaffoldを試みたときにエラーが発生し始めたときです。
選択したコードジェネレーターの実行中にエラーが発生しました:「呼び出しのターゲットによって例外がスローされました。」
接続文字列をWeb.configに戻すと、問題が解決しました。
これで問題は解決しましたが、
throwIfV1Schema: false
をDbContext
のベースに追加しています
そのように:
public MyDbContext() : base("ConectionStringName", throwIfV1Schema: false) { }
「ASP.NET MVC5 with Entity Framework」を使用してscaffoldを使用してコントローラーを作成しているときに同じ問題に直面していました
問題は、<connectionStrings>
タグの前の<configSections>
in web.config。設定<connectionStrings>
後<configSections>
は問題を解決しました。
足場の間に、ASP.NET MVCは最初にEntity Frameworkを解決し、次に接続文字列を解決したいと思います。以前に接続文字列を提供したため、Entity Frameworkバージョンを解決した後、接続文字列を見つけることができなかったため、呼び出し問題がスローされました。
返事が遅れ;しかし、誰かがこの回答を使用して問題を解決できることを期待して、この回答を投稿しています。
何らかの理由で、プログラムが(web.configまたは他の手段から)connectionString情報を読み取れない場合、このエラーがスローされます。
有効なconnectionString情報が問題なく適切に取得されていることを確認してください。
同じエラーメッセージが表示されました。 [コントローラーの追加]ダイアログから新しいData context class
を追加しようとすると、別のエラーが発生しました。
There was an error running the selected code generator:
'Sections must only appear once per config file. See the help topic
<locations> for exceptions.
Web.configファイルに2つの<connectionStrings>
要素があったことがわかりました。 (Entity Frameworkモデルを含むクラスライブラリのapp.configから貼り付けました。)
足場アイテムを追加しないという同じ問題がありました
実行するにはPackage Manager Console:
ツール-> NuGetパッケージマネージャー->パッケージマネージャーコンソール
削除する:
UnInstall-Package EntityFramework
再インストールする:
Install-Package EntityFramework
または、1つのコマンドで:
Update-Package -reinstall EntityFramework
これが誰かに役立つことを願っています。
私の場合、web.configで定義されているように、DBContextコンストラクターを静的接続文字列のみに戻す必要がありました
動的に作成された接続文字列を使用すると、足場は機能しませんでした。
public MyContext() : base("name=MyContext") { }
これはエラーの解決に役立つ場合があります。
私のOnModelCreatingでは、各エンティティに対してこれを行っていました:
modelBuilder.Configurations.Add(new EntityTypeConfiguration<EntityModel>);
次のように変更すると、受信しているエラーが表示されなくなりました。
modelBuilder.Entity<EntityModel>();
上記のほとんどを運なしで試しました。
最終的に機能したのは:
その後、すべてが再び機能し、開発時間は3時間短縮されました。
動的に作成された接続文字列とモデルに関係があるようです。何が起こったのかについての考えをいただければ幸いです。
私もVS 2015を使用してこの問題に遭遇しました。ここで他のすべてのソリューションを試してみましたが、成功しませんでした。私の接続文字列(MSがそれを形成するように指示したとおりに形成されましたが)が適切に機能するには、二重の\が必要であることがわかりました。
動作していなかったのは次のとおりです。
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\V11.0;AttachDbFilename=|DataDirectory|\SquashSpiderDB.mdf;Initial Catalog=SquashSpiderDB;Integrated Security=True" providerName="System.Data.SqlClient" />
コードジェネレーターを機能させるために変更したものは次のとおりです。
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\\V11.0;AttachDbFilename=|DataDirectory|\SquashSpiderDB.mdf;Initial Catalog=SquashSpiderDB;Integrated Security=True" providerName="System.Data.SqlClient" />
V11.0の前にある2つの\文字とデータベース名に注意してください。
これが誰かの時間を節約することを願っています。
[〜#〜] update [〜#〜]
これによりコード生成が機能しますが、\ V11.0が有効な接続文字列ではないため、アプリは実行されません。これは、MSが接続文字列を解析するときにコード生成にバグがあるように見えます。アプリを再び動作させるためにコード生成を実行した後、単一の\に戻す必要がありました。
更新2
パートナーがさらに掘り下げた後、コード生成を本当に台無しにしているのは、「初期カタログ」フィールドを変更したという事実であることがわかりました。プロジェクトがウィザードによって作成されたとき、初期カタログが自動的にaspnet--に設定されました。その後、この初期カタログフィールドをDBに変更しました。これは、実行中のアプリケーションに最適です。データベースに問題なく到達できます。しかし、何らかの理由で、これはコードの足場生成を台無しにします。初期カタログを以前の状態(aspnet--)に戻すことにより、足場は(\ V11.0を必要とせずに)再び機能し始めました。
これが将来誰かを助けることを願っています。
Web.config
を介した設定/矛盾したエントリの接続に問題があるようです。この問題を修正するには、以下の手順に従ってください。
接続関連情報を削除します(<connectionStrings>をWeb.config
から開始し、これまでに生成されたモデルを削除します。
ここでモデルを生成すると、Web.config
ファイルに新しい接続エントリが追加されます。モデルが生成されたら、ソリューションを構築し、足場の制御を開始します。それが動作します。
私の解決策は、Web Configの接続文字列名をDefaultConnectionに戻すだけの簡単なものでした。私のdbContextには別の名前がありますが!
このナンセンスを見つけるのに2時間かかった!
私の場合、web.configの接続文字列に関する問題を解決しました。
前の問題<connectionStrings configSource="Configs\ConnectionString.config"/>
理由はわかりませんが、vsはデータベースに接続できず、失敗します。
変更後
<connectionStrings> <add name="UIBuilderContext" connectionString="metadata=res:/ ..... " /> </connectionStrings>
そしてそれは動作します
エンティティ間の関係または他のモデル設計の問題を確認します。テストのために、関係なく新しいクラスモデルを作成し、Scaffoldを使用してコントローラーとビューを生成します。私のために働く。
同じエラーが発生しました。問題を解決するために私がしたことは次の2つです。
万が一、Tom Dykstraによる「MVC 5を使用したEntity Framework 6 Code First入門」に従っている場合。
私はすべてを二重にチェックし、私の接続文字列は完璧です。気付かなかったのは、既に持っているappSettingsの別のセットをコピーしたことです。下を見て
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
私のアドバイスは、Web.configのあらゆる部分をチェックすることであり、それが原因であると確信しています。
私の場合、NuGetは次のプロバイダーをweb.configに追加しました。
<provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact"/>
プロバイダーを変更したとき
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
それは問題を解決しました(それを理解するのに約5時間かかりました:-()
モデルにいくつかの変更を加えたときに同じエラーが発生していました..解決できる唯一の方法は、1)プロセスを停止/終了する2)ソリューションをクリーンアップしてソリューションを再構築することでした
接続文字列の問題です(99%肯定的です)。 Web.Configで問題を修正すると、エラーはなくなりました。別のプロジェクトで最初にDBを使用し、App.configからweb.configにDB first接続文字列をコピーすると(同じ名前を使用して)、期待どおりに機能しました。
私はこれを持っていました:
<appSettings configSource="App_Config\Server\AppSettings.config" />
<connectionStrings configSource="bin\Connections.config" />
両方を削除し、元に戻す必要がありました。
<connectionStrings>
<add name="UIBuilderContext" connectionString="metadata=res:/ ..... " />
</connectionStrings>
削除しても同じエラーが発生します。
Visual Studio 2015を使用する
Mysqlサーバーをアップグレードし、その過程でVisual Studioのmysqlが6.9.7から6.9.8にアップグレードされました
私のWeb設定では、古い6.9.7バージョンへの参照がまだありました
この問題を解決したgit diffは次のとおりです。
- <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices,MySql.Data.Entity.EF6,Version=6.9.7.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"></provider>
+ <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices,MySql.Data.Entity.EF6,Version=6.9.8.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"></provider>
私の場合、問題は外部アプリの設定ファイルが原因でした。
<appSettings configSource="appSettings.config" />
アプリの設定をweb.configファイルに戻すことで問題が解決しました。
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
この質問は今では古いものであることに気付きましたが、後で問題が解決した場合に備えて、問題を解決したものを投稿したいと思いました。私の場合、それは他の回答で言及されたいくつかのことの組み合わせでした。接続文字列を保護するために...
これを行った後、これ以上コントローラーを作成できませんでした。この問題を解決するには、...
コンテキストクラスにパラメーターなしのコンストラクターを追加し、次のようにconnectionStringの名前を付けます:public contextClass() : base("name=connectionStringName") { }
ソリューションを再構築し、コントローラーを再度作成すると、うまくいきました!
何らかの理由で、web.configの<configSections>
の間にあるOracle.manageddataaccess.clientセクションをコメントアウトすると、機能しました。 (VS 2015およびODT 12)
<configSections>
<section name="entityFramework" type" />
<!-- For more information on Entity Framework configuration, visit http://go.Microsoft.com/fwlink/?LinkID=237468 -->
<!--<section name="Oracle.manageddataaccess.client" />-->
</configSections>
みんな。私は少し遅れていることは知っていますが、この問題に関する私の経験を共有するのにそれはまだ有効だと思います。
2つのプロジェクトでこのメッセージに直面しましたが、どちらの場合も接続文字列に問題がありました。
最初のケースでは、「Initial Catalog」(分離)ではなく「InitialCatalog」でした。
2番目のケースでは、サーバー名(データソースパラメーター)が間違っていました。
役に立てば幸いです。
宜しくお願いします。