web-dev-qa-db-ja.com

EF 5 Enable-Migrations:アセンブリにコンテキストタイプが見つかりませんでした

4つのプロジェクトがあります。

Toombu.Entities : all models are there
Toombu.DataAccess: Mapping, Repository and ToombuContext
Toombu.Logique : Logic of my application
Toombu.Web : MVC 4 application. With all others DLL.

Toombu.Webで移行を有効にしようとしましたが、このエラーが発生しました:

No context type was found in the Assembly

移行を有効にするにはどうすればよいですか?

51
NOr

パッケージマネージャーコンソールで-ProjectNameオプションを使用します。

Enable-Migrations -ProjectName Toombu.DataAccess -StartUpProjectName Toombu.Web -Verbose
90
hVostt

この質問に対する明白な答えを誰も言及していないことに驚いています:Entity Frameworkは、移行を有効にする前にコンテキストを必要とします。 OPが投稿したエラーメッセージは、コンテキストが見つからなかったことを示唆しています。確かに、パッケージマネージャーコンソールがコンテキストを「認識」しないためである可能性があります。その場合、受け入れられた答えは可能な解決策です(別の解決策は、以下で提案するものです)。ただし、他のソリューションが機能する前に、現在のプロジェクト(アセンブリ)にコンテキストが存在する必要があります。

コンテキストを持つとはどういう意味ですか?これは、(System.Data.Entity内の)DbContextを継承するクラスがプロジェクトに存在する必要があることを意味します。以下に例を示します。

public class MyDbContext : DbContext
{
    public MyDbContext()
    {
    }
}

必ず使用してください

using System.Data.Entity;

上記のコードがDbContextクラスにアクセスし、NuGetを使用して現在のプロジェクトのEntity Framework 4.1以降を取得している場合。

ずっとコンテキストがあり、パッケージマネージャーコンソールがそれを「表示」しない場合:Visual Studio 2013では、-ProjectNameスイッチを使用する必要はありません。代わりに、パッケージマネージャーコンソール([表示]の[他のウィンドウ]リストで使用可能)に移動し、パッケージマネージャーコンソールのドッキング可能なウィンドウの上部に表示される2つのドロップダウンを確認します。最初のドロップダウンは、パッケージソース用です。 2つ目はデフォルトプロジェクト用です。デフォルトプロジェクトをドロップダウンしてソリューション内のプロジェクトを選択すると、パッケージマネージャーコンソールで発行したコマンドはすべて、選択したプロジェクトに対して実行されます。

128
Jazimov

デフォルトのプロジェクトを変更し、ドロップダウンからスタートアッププロジェクトを選択します。 enter image description here

39
Sadjad Khazaie

まだこの問題に直面している場合。次のコマンドを使用して解決しました。

Enable-Migrations -ProjectName <YOUR_PROJECT_NAME> -ContextTypeName <YOUR_CONTEXT_NAME>

コンテキスト名への絶対パスを使用することを忘れないでください。

7
Abhinandan

DbcontextはToombu.DataAccessにあるため、Toombu.DataAccessで移行を有効にする必要があります。

5

以下の手順に従って問題を解決してください

Install-Package EntityFramework-IncludePrerelease

またはNuget Package Managerからエンティティフレームワークをインストールする

Visual Studioを再起動します

その後、「アセンブリにコンテキストタイプが見つかりません」と表示されていました

解決するには-この「コンテキストなし」は、DbContextなどのサフィックスを使用してアプリの「モデル」フォルダーにクラスを作成する必要があることを意味します...このAppDbContextのように。そこで、System.Data.Entityを使用してライブラリを含める必要があります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;


namespace Oceans.Models
{
    public class MyDbContext:DbContext
    {
        public MyDbContext()
        {
        }
    }
}

その後、パッケージマネージャーで以下のコマンドを実行します。

Enable-Migrations -ProjectName <YourProjectName> -ContextTypeName <YourContextName>

私のプロジェクト名は-MyFirstAppとAppDbContextはモデルフォルダー内にあるため、パスは

Enable-Migrations -StartUpProjectName MyFirstApp -ContextTypeName MyFirstApp.Models.AppDbContext
2

上記の2つのコメントを組み合わせて実行する必要がありました。

パッケージマネージャーコンソール内のデフォルトプロジェクトの設定、および-ContextTypeName変数を完全なコマンドに追加するというAbhinandanのコメントの両方。だから私のコマンドは次のとおりでした。

Enable-Migrations -StartUpProjectName RapidDeploy -ContextTypeName RapidDeploy.Models.BloggingContext -Verbose

私の設定::

  • ProjectName-RapidDeploy
  • BloggingContext(DbContextを含むクラス、ファイルはメインプロジェクトのModelsフォルダー内にあります)
2
ekgcorp

Moshチュートリアルでは、テンプレートにdbコンテキストを作成する個々のユーザーアカウントが選択されました。また、EntityFrameworkがNugetパッケージマネージャーにインストールされていることを確認してください。 enter image description here

1
Bukunmi

ModelsディレクトリにClassという名前を作成しました:myData次のコードを使用します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;

namespace Vidly.Models
{
    public class MyDbContext : DbContext
    {
        public MyDbContext()
        {
        }
    }
}

control-shift-bでアプリを再構築

次に、nuGetコンソールで次を実行しました。

Enable-Migrations -StartUpProjectName Vidly -ContextTypeName Vidly.Models.MyDbContext -Verbose

コンソールが返した:

スタートアッププロジェクト「Vidly」を使用します。 NuGetプロジェクトを 'Vidly'で使用します。コンテキストが既存のデータベースを対象とするかどうかを確認しています...プロジェクトVidlyで有効なCode First Migrations。 Enable-Migrations -StartUpProjectName Vidly -ContextTypeName Vidly.Models.myData -Verbose

また、FrameWorkはMigrationsディレクトリを作成し、次のコードを使用してそこにConfiguration.csテンプレートを作成しました:

namespace Vidly.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;

    internal sealed class Configuration : DbMigrationsConfiguration<Vidly.Models.MyDbContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }

        protected override void Seed(Vidly.Models.MyDbContext context)
        {
            //  This method will be called after migrating to the latest version.

            //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
            //  to avoid creating duplicate seed data.
        }
    }
}
1
Paul

私の問題はリンクだった----> problem1

私は1つの簡単なコマンドラインでその問題を解決しました

Install-Package EntityFramework-IncludePrerelease

その後、次のようなもう1つの問題に直面する必要がありました。

「アセンブリにコンテキストタイプが見つかりませんでした」

これは本当に簡単に解決できます。この「コンテキストなし」は、DbContextなどのサフィックスを使用してアプリの「Model」フォルダーにクラスを作成する必要があることを意味します...このMyDbContextのように。そこで、System.Data.Entityを使用してライブラリを含める必要があります;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;


namespace Oceans.Models
{
    public class MyDbContext:DbContext
    {
        public MyDbContext()
        {
        }
    }
}

その後、次のコマンドラインが必要になりました。

Enable-Migrations -ProjectName <YourProjectName> -ContextTypeName <YourContextName>

デフォルトのプロジェクトをデータアクセスに変更する

パッケージマネージャーコンソールのデフォルトのプロジェクトドロップダウンをデータアクセスに変更し、移行を有効にします...

それはすべて成功です

1
ohmprakashinfo

提案をありがとう、ここですべてのソリューションを組み合わせることで問題を解決しました。最初に、DbContextモデルを作成しました。

 public class MyDbContext: DbContext
    {
        public MyDbContext()
        {
        }
    }

Dbcontextクラスを作成した後、プロジェクト名を指定してenable-migrationコマンドを実行しました:enable-migrations -ProjectName YourProjectName

1
befree2j

私はこれと同じ問題を抱えています。既に行ったことがある場合でも、移行を有効にすることを試みました。しかし、それは同じエラーを与え続けます。この問題を克服するには、forceスイッチを使用する必要がありました。これは、他の人の場合に役立つだけでなく、回避策にも役立つと確信しています。

強制的に移行を有効にした後、データベースを更新する必要があります(デフォルトのプロジェクトが正しく設定されていることを確認してください)。そうしないと、明示的な移行が保留されているなどの別の問題が発生します。

その後、add-migrationsまたは他のコマンドを実行するだけで、動作するはずです。

Enable-Migrations -ProjectName <PROJECT_NAME> -ContextTypeName <FULL_CONTEXT_NAMESPACE.YOUR_CONTEXT_NAME> -force
0
Riyaz Hameed

NuGetパッケージマネージャーを使用して、すべてのプロジェクトで同じバージョンのEntity Frameworkを使用していることを確認してください。

最近のWindowsの更新により、Entity Frameworkの新しいバージョンがアクティブなプロジェクトにインストールされた可能性があります。

背景:2016年3月16日頃、既に移行を有効にし、正常に移行を完了したプロジェクトに移行を追加しようとすると、このエラーが発生し始めました。

3月10日頃、Entity Framework 6の新しい安定バージョンがリリースされたことに気付きました。

Enable-migrationsコマンドで-ContextTypeNameパラメーターを指定した場合、移行が既に有効になっていることを示すエラーが表示されました。

解決:

1)ツール-> Nuget Package Manager->ソリューションのNugetパッケージの管理

2)(この手順が必要かどうかはわかりませんが、..)Nuget Package Managerのバージョンを最新バージョンに更新しました。また、Nuget Package Managerのバージョンを更新した後、NuGetコマンドラインが正常に機能する前にVisual Studioを2回再起動する必要がありました。

3)ツール-> Nugetパッケージマネージャー->ソリューションのNugetパッケージの管理->インストール済みパッケージの検索->エンティティフレームワークの入力

a。 Entity Frameworkの複数のバージョンが表示される場合があります。

b。 Entity Frameworkの各バージョンで[管理]をクリックし、プロジェクトがEntity Frameworkの同じバージョンを使用していることを確認します。

  • 使用していないEntity Frameworkのバージョンのチェックを外し、使用しているEntity Frameworkのバージョンについては、必要なプロジェクト全体でチェックされていることを確認してください。

繰り返しになりますが、手順2で説明したように、NuGetパッケージマネージャーのバージョンを更新した後、NuGetパッケージマネージャーコンソールを正しく動作させるには、Visual Studioを2回再起動する必要がありました。コンソールの初回起動時にエラーが発生し、2回目のenable-migrationsコマンドの実行時に「8つの引数でcreateinstancefromを呼び出す例外がファイルまたはアセンブリEntityFrameworkをロードできませんでした」と表示されました。

ただし、Visual Studioを再起動すると、これらの問題は解決されるようです。

0
WWC

コンパイラがアプリケーションで「Context」クラスを取得していないため、このエラーが発生しています。したがって、Add-> Classで手動で追加し、 'DbContext' Class For Exampleで継承できます。

public class MyDbContext : DbContext
    {
        public DbSet<Customer> Customer { get; set; }
        public MyDbContext()
        {
        }
    }
0
Rohit Ghatage