web-dev-qa-db-ja.com

アプリケーションはアイテムをスキャフォールドできません

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のアンインストール/再インストールも変更なしで試しました。

このエラーを引き起こす可能性のあるものについて他のアイデアはありますか?

47
runamuk0

私もこの問題を抱えていました。DBコンテキストでbase.onModelCreatingを呼び出すことで問題を解決しました

base.OnModelCreating(modelBuilder);
15
Mhand7

私の場合、Web.configから接続文字列を移動して

<connectionStrings configSource="ConnectionStrings.config"/>

それは、scaffoldを試みたときにエラーが発生し始めたときです。

選択したコードジェネレーターの実行中にエラーが発生しました:「呼び出しのターゲットによって例外がスローされました。」

接続文字列をWeb.configに戻すと、問題が解決しました。

41
Developer SPM

これで問題は解決しましたが、

throwIfV1Schema: falseDbContextのベースに追加しています

そのように:

public MyDbContext() : base("ConectionStringName", throwIfV1Schema: false) { }
13
Rewdiz

「ASP.NET MVC5 with Entity Framework」を使用してscaffoldを使用してコントローラーを作成しているときに同じ問題に直面していました

問題は、<connectionStrings>タグの前の<configSections> in web.config。設定<connectionStrings><configSections>は問題を解決しました。

足場の間に、ASP.NET MVCは最初にEntity Frameworkを解決し、次に接続文字列を解決したいと思います。以前に接続文字列を提供したため、Entity Frameworkバージョンを解決した後、接続文字列を見つけることができなかったため、呼び出し問題がスローされました。

12
Shirajul Mamun

返事が遅れ;しかし、誰かがこの回答を使用して問題を解決できることを期待して、この回答を投稿しています。

何らかの理由で、プログラムが(web.configまたは他の手段から)connectionString情報を読み取れない場合、このエラーがスローされます。

有効なconnectionString情報が問題なく適切に取得されていることを確認してください。

10
Ashok kumar

同じエラーメッセージが表示されました。 [コントローラーの追加]ダイアログから新しい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から貼り付けました。)

6
n8mob

足場アイテムを追加しないという同じ問題がありました

実行するにはPackage Manager Console

ツール-> NuGetパッケージマネージャー->パッケージマネージャーコンソール

削除する:

UnInstall-Package EntityFramework

再インストールする:

Install-Package EntityFramework

または、1つのコマンドで:

Update-Package -reinstall EntityFramework

これが誰かに役立つことを願っています。

5
Enzero

私の場合、web.configで定義されているように、DBContextコンストラクターを静的接続文字列のみに戻す必要がありました

動的に作成された接続文字列を使用すると、足場は機能しませんでした。

public MyContext() : base("name=MyContext") { }
5
tr3v

これはエラーの解決に役立つ場合があります。

私のOnModelCreatingでは、各エンティティに対してこれを行っていました:

modelBuilder.Configurations.Add(new EntityTypeConfiguration<EntityModel>);

次のように変更すると、受信しているエラーが表示されなくなりました。

modelBuilder.Entity<EntityModel>();
3
chicken

上記のほとんどを運なしで試しました。

最終的に機能したのは:

  1. 以前に動的に作成された文字列エントリを削除します
  2. モデルを削除する(すべてのコントローラーとビューを保持する)
  3. ADO.NET Entity Data Modelを再作成します-同じ名前を使用して、以前と同じ名前の新しい接続文字列エントリを作成します

その後、すべてが再び機能し、開発時間は3時間短縮されました。

  1. すべてのプロパティ属性を(バックアップから)テーブル/エンティティクラスに再追加します

動的に作成された接続文字列とモデルに関係があるようです。何が起こったのかについての考えをいただければ幸いです。

3
user1695121

私も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を必要とせずに)再び機能し始めました。

これが将来誰かを助けることを願っています。

2
Greg Veres

Web.configを介した設定/矛盾したエントリの接続に問題があるようです。この問題を修正するには、以下の手順に従ってください。

接続関連情報を削除します(<connectionStrings>をWeb.configから開始し、これまでに生成されたモデルを削除します。

ここでモデルを生成すると、Web.configファイルに新しい接続エントリが追加されます。モデルが生成されたら、ソリューションを構築し、足場の制御を開始します。それが動作します。

2
Manish K Pandey

私の解決策は、Web Configの接続文字列名をDefaultConnectionに戻すだけの簡単なものでした。私のdbContextには別の名前がありますが!

このナンセンスを見つけるのに2時間かかった!

2
DJ.

私の場合、web.configの接続文字列に関する問題を解決しました。

前の問題<connectionStrings configSource="Configs\ConnectionString.config"/>

理由はわかりませんが、vsはデータベースに接続できず、失敗します。

変更後

<connectionStrings> <add name="UIBuilderContext" connectionString="metadata=res:/ ..... " /> </connectionStrings>

そしてそれは動作します

2
Math

エンティティ間の関係または他のモデル設計の問題を確認します。テストのために、関係なく新しいクラスモデルを作成し、Scaffoldを使用してコントローラーとビューを生成します。私のために働く。

2
FVVID

同じエラーが発生しました。問題を解決するために私がしたことは次の2つです。

  1. コンテキストのベースに名前を追加しました:base( "name = connectionstringname")
  2. 接続文字列を間違えて修正しました。
1
Reonbs

万が一、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のあらゆる部分をチェックすることであり、それが原因であると確信しています。

1
Crismogram

私の場合、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
Stefan de Groot

モデルにいくつかの変更を加えたときに同じエラーが発生していました..解決できる唯一の方法は、1)プロセスを停止/終了する2)ソリューションをクリーンアップしてソリューションを再構築することでした

1
user3507981

接続文字列の問題です(99%肯定的です)。 Web.Configで問題を修正すると、エラーはなくなりました。別のプロジェクトで最初にDBを使用し、App.configからweb.configにDB first接続文字列をコピーすると(同じ名前を使用して)、期待どおりに機能しました。

1
ransems

私はこれを持っていました:

<appSettings configSource="App_Config\Server\AppSettings.config" />
<connectionStrings configSource="bin\Connections.config" />

両方を削除し、元に戻す必要がありました。

<connectionStrings>
    <add name="UIBuilderContext" connectionString="metadata=res:/ ..... " />
  </connectionStrings>

削除しても同じエラーが発生します。

0
RC Cola

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>
0
Kyle s

私の場合、問題は外部アプリの設定ファイルが原因でした。

<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>
0
Eric Scott

この質問は今では古いものであることに気付きましたが、後で問題が解決した場合に備えて、問題を解決したものを投稿したいと思いました。私の場合、それは他の回答で言及されたいくつかのことの組み合わせでした。接続文字列を保護するために...

  1. 接続文字列をWeb.configファイルから移動しました
  2. サーバー名とパスワードをWeb.configのAppSettings部分で参照される別のファイルに移動しました
  3. SqlConnectionStringBuilderを使用して要素をまとめ、コンテキストクラスコンストラクターに渡します

これを行った後、これ以上コントローラーを作成できませんでした。この問題を解決するには、...

  1. 完全な接続文字列をWeb.configに戻し、外部接続文字列ファイルへの参照を削除します
  2. コンテキストクラスにパラメーターなしのコンストラクターを追加し、次のようにconnectionStringの名前を付けます:public contextClass() : base("name=connectionStringName") { }

  3. ソリューションを再構築し、コントローラーを再度作成すると、うまくいきました!

0
starx207

何らかの理由で、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>
0
Ryan Walker

みんな。私は少し遅れていることは知っていますが、この問題に関する私の経験を共有するのにそれはまだ有効だと思います。

2つのプロジェクトでこのメッセージに直面しましたが、どちらの場合も接続文字列に問題がありました。

最初のケースでは、「Initial Catalog」(分離)ではなく「InitialCatalog」でした。

2番目のケースでは、サーバー名(データソースパラメーター)が間違っていました。

役に立てば幸いです。

宜しくお願いします。

0
Joel Rodrigues