web-dev-qa-db-ja.com

Code Firstは移行を有効にできません

移行を有効にしようとしていますが、例外がスローされています:

コンテキストが既存のデータベースをターゲットにしているかどうかを確認しています... System.TypeInitializationException: 'System.Data.Entity.Migrations.DbMigrationsConfiguration`1'の型初期化子が例外をスローしました。 ---> System.TypeInitializationException: 'System.Data.Entity.Internal.AppConfig'の型初期化子が例外をスローしました。 ---> System.Configuration.ConfigurationErrorsException:構成システムの初期化に失敗しました---> System.Configuration.ConfigurationErrorsException: 'name'属性は 'section'タグで指定する必要があります。

App.configファイルが正しくセットアップされていないと想定しています(EFパッケージを追加したときに自動的にセットアップされました)。接続文字列を追加するだけでした:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>

  <section Name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
 <!-- For more information on Entity Framework configuration, visit http://go.Microsoft.com/fwlink/?LinkID=237468 --></configSections>

 <connectionStrings>
   <add Name="MyContext" connectionString="data source=MYSERVER;initial catalog=CodeFirstTest;user id=***;password=***;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
 </connectionStrings>

 <entityFramework>
   <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
     <parameters>
       <parameter value="v11.0" />
     </parameters>
   </defaultConnectionFactory>
   <providers>
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
   </providers>
 </entityFramework>
</configuration>

SQL Server 2008 R2を使用しています。

接続文字列があるので、defaultconnectionfactoryが必要だとは思わない。私は正しいですか? (注:このセクションがなくても、同じ例外が発生します)

私は他に何が欠けていますか?

15

<connectionString />エントリが<configuration>の直後のWeb.configの上部にある場合、同じ問題が発生しました。それから</configuration>の直前に動かしてみましたが、うまくいきました。

50
Lester S

これは主に設定ファイルを使用することです。したがって、実際に役立つスタックトレースは「System.Configuration.ConfigurationErrorsException」です。多くの理由がある可能性がありますが、それらはすべて、以前に回答したように、構成ファイルに主に修正が含まれています。これとは少し異なる可能性のいくつかを以下に示します(しかし、スタックは本当に教えてくれます)

  1. 理由の1つとして考えられるのは、移行が有効になっているプロジェクトがスタートアッププロジェクトと異なる可能性があることです。そのため、必ずNugetコマンドに-StartUpProjectを追加してください。
  2. 使用されるエンティティフレームワークのバージョンは、2つの異なるプロジェクトの場合は異なる場合があります。
7
skillworks

私は同じ問題に会った。私の問題は、Web.configファイルに二重の接続文字列があることです。以下のように:

<add name="DB1234" ..../> <add name="DB1234" ..../>したがって、まずweb.configファイルを確認する必要があります。幸運を!

2
nisiumi

私の場合、DevExpress MVCで生成されたテンプレートを使用して、web.configの<sectionGroup name="devExpress">...<sectionGroup/>の後に追加の行を追加する必要があります

<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
1
iRviNe48

あなたの 'connectionString'のスペルをチェックして、それが 'connectionStrings'であることを確認してください。 「s」を追加した後、それはそれを解決しました。

1
micheal__og

私の場合、ソリューションに複数のプロジェクトがあり、別のプロジェクトがスタートアッププロジェクトとして設定されました。スタートアッププロジェクトが解決したときに、移行を有効にしようとしていたプロジェクトを設定しました。

1
Owen Pauling

@Lester回答のようにWeb設定をチェックします。次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    ...
  </configSections>
  <appSettings>
   ...
  </appSettings>
  ...
<configuration>
0
Ali Karaca

私の経験では、たとえば、データベースとの接続を確立するために使用されるすべての情報は、startup-projectにある設定ファイルからのものであり、私がいるプロジェクトにあるものではないということですenable-migrationsまたはupdate-database命令の生成または使用、例iプロジェクトPRINCIPALおよび別のプロジェクトDATAがありますPRINCIPALのものです。

0
Abdiel

これを<configSections>に含めます

<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

私の場合、Visual Studioの2つのインスタンスを開いていると、この行は省略されます。このエラーを回避するには、Visual Studioのすべてのインスタンスを閉じ、インターフェイスNugetまたはコンソールを介してEFを開いて再インストールします

0
Davi Menezes

Webconfigを確認します。たとえば、次のようなアプリ設定がありました。

   <configuration> 
    <appSettings>
          <add key="dhx_license" value="value"/>
    </appSetting>
.....

そしてそのエラーを投げました。しかし、その後、appSettingが下に複製されていることに気づいたので移動し、エラーは消えました。ありがとう。

0
ferralucho