web-dev-qa-db-ja.com

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

コードを先に使用して.NET 4.0、MVC3、およびEF5を使用しています。

私のソリューションは、次のような依存関係を持つ3つのプロジェクトに分割されています。

Project.Web-> Project.BLL-> Project.DAL

Project.DALレイヤーには、エンティティフレームワークデータコンテキストクラスとすべてのエンティティが含まれていますが、スタートアッププロジェクトはProject.Webなので、Web.config、接続文字列、および実際のSQLコンパクトデータベースが含まれています。

既存のデータを消去せずにEFモデルに新しいテーブルを追加できるように、移行を有効にしようとしています。ただし、「Enable-Migrations」を実行すると、

No context type was found in the Assembly 'Project.Web'.

スタートアッププロジェクトをProject.DALとして設定すると、エラーは次のように変わります。

Could not load Assembly 'Project.Web'. (If you are using Code First Migrations inside Visual Studio this can happen if the startUp project for your solution does not reference the project that contains your migrations. You can either change the startUp project for your solution or use the -StartUpProjectName parameter.)

なぜこのエラーが発生したのか、それを修正するために私ができることは誰でも知っていますか?

33
Cavyn VonDeylen

最終的に this の質問で答えを見つけました。基本的に、パッケージマネージャーコンソールには「既定のプロジェクト」ドロップダウンがあります。 EFコンテキストを含むプロジェクトにこれを設定する必要があります。

83
Cavyn VonDeylen

私は同様の投稿を見つけました: 個別のアセンブリのコンテキストで移行を有効にしますか?

例:

enable-migrations -ContextProjectName MyProject.DBContexts -contexttypename MyProject.DBContexts.MyContextName -Verbose
3
d.danailov

私のようにこの間違いを犯した人のために:

コンテキストクラスは、次のようにDbContextから継承する必要があります。

public class DirectorRequestContext : DbContext
{
    public DbSet<DirectorRequest> DirectorRequests { get; set; }
}
1
Jacob

また、何らかの理由で接続しているクラスがプロジェクトにない場合にも発生します。そのため、右クリックして[プロジェクトに追加]を選択すると整理されます。

0
Richard Housham