13

3 つのエンティティ クラスと DbContext を備えた C# クラス ライブラリを作成し、データベースのコード ファースト生成を行いました。バージョン 1 ですべてがうまくいきました。別のテスト ライブラリを作成しましたが、DbContext クラスを含むクラス ライブラリは期待どおりに動作しています。

ここで、フィールドの 1 つを必須にしたいと考え、コード ファーストの規則に従って、エンティティ クラスのプロパティに [Required] 属性を追加しました。次のステップは、移行を有効にすることでした。

パッケージ マネージャー コンソールに移動し、「enable-migrations」と入力して ... bang ... 「指定されたメタデータ リソースを読み込めません」と入力しました。

参考までに、私の DbContext クラスには以下が含まれています。

public OrganisationsContext()
    : base("Leegz_Entities_Organisations")
{
    this.Configuration.LazyLoadingEnabled = false;
    this.Configuration.ProxyCreationEnabled = false;
}

public DbSet<Organisation> Organisations { get; set; }
public DbSet<Member> Members { get; set; }
public DbSet<LeegzUser> LeegzUsers { get; set; }

そして私のapp.configには以下が含まれます:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <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>
  <connectionStrings>
    <add name="Leegz_Entities_Organisations" connectionString="data source=NEIL-INSPIRON\NEILDEV;initial catalog=TheLeegz;integrated security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <appSettings>
    <add key="Leegz.Entities.Organisations.DbSecuritySchema" value="Leegz.Entities.Organisations"/>
  </appSettings>
</configuration>

この件に関する多くのスレッドを見てきましたが、それらはすべて EDMX モデル ファイルの参照要素のエラーについて話しているようです。ただし、コード ファーストを使用したため、モデルがありません (ここで手順が不足している可能性があります)。そのため、接続文字列の EDMX 情報に関連して見たアドバイスは、私に適用する。

何かアイデアはありますか?

4

3 に答える 3

25

私は同様の問題を抱えていましたが、結果は異なりました。デバッグに時間がかかりすぎたため、ヒントをいくつか示します。

  1. 「指定されたメタデータ リソースを読み込めません。」エラーは接続文字列に関連しています。
  2. すべてのエンティティがあるプロジェクトで接続文字列を確認することから始めます。
  3. 接続文字列がコード ファーストアプローチ用であり、モデル ファーストまたはデータベース ファーストアプローチ用ではないことを確認してください (以下の例を参照)。
  4. DbContext に関連する接続文字列があるソリューション内のすべてのプロジェクトで、これらの手順を繰り返します。
  5. 次に、Enable-Migrationsコマンドを再試行すると、正しく機能するはずです。

モデルの最初の接続文字列の例:

<add name="MyContext" 
    connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=MY_DB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" 
    providerName="System.Data.EntityClient" />

コードの最初の接続文字列の例:

<add name="MyContext" 
    connectionString="Data Source=.;Initial Catalog=MY_DB;Integrated Security=True;MultipleActiveResultSets=True" 
    providerName="System.Data.SqlClient"/>
于 2015-01-07T22:30:15.263 に答える
5
  1. ソリューションに複数のプロジェクトがある場合は、パッケージ マネージャー コンソール ウィンドウで、dbContext を使用してプロジェクトを選択したことを確認してください。
  2. 移行では、name が DbContext クラスに等しい connectionString を使用します。あなたの場合、OrganisationsContext ですが、Leegz_Entities_Organisations ではありません。
于 2013-11-06T19:32:14.843 に答える