在程序集中找不到上下文类型

时间:2012-10-23 13:48:31

标签: asp.net entity-framework connection-string data-access-layer entity-framework-5

我首先使用.NET 4.0,MVC3和EF5代码。

我的解决方案分为三个项目,其中包含依赖项:

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

Project.DAL层包含我的实体框架数据上下文类和我的所有实体,但我的启动项目是Project.Web,因此它包含我的Web.config,连接字符串和实际的SQL压缩数据库。

我正在尝试启用迁移,因此我可以在不擦除现有数据的情况下向EF模型添加新表。但是,当我运行“启用 - 迁移”时,我得到了

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.)

有谁知道造成这个错误的原因或我可以做些什么来解决它?

5 个答案:

答案 0 :(得分:83)

我最终在this问题中找到答案。基本上,在软件包管理器控制台中有一个“默认项目”下拉列表。您需要将其设置为包含EF上下文的项目。

答案 1 :(得分:3)

我找到了类似的帖子:Enable Migrations with Context in Separate Assembly?

示例:

enable-migrations -ContextProjectName MyProject.DBContexts -contexttypename MyProject.DBContexts.MyContextName -Verbose

答案 2 :(得分:1)

像我一样犯了这个错误的人:

您的上下文类必须继承自DbContext,就像那样:

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

答案 3 :(得分:1)

以上其他答案均未回答我的问题。

我最终放弃了Package Manager控制台,因为它似乎正在使用EF6而不是EFCore ...

幸运的是,您可以从普通的PowerShell中运行以下Entity Framework命令:

C:\MyRepository\MyProject dotnet ef migrations add InitialDbCreation

(确保您位于包含DbContext继承的项目目录中。)

最后,我得到了真正的错误:

Your startup project 'FantasyFitness' doesn't reference Microsoft.EntityFrameworkCore.Design. 
This package is required for the Entity Framework Core Tools to work. 
Ensure your startup project is correct, install the package, and try again.

因此,我转到项目上的“管理NuGet软件包”并安装Microsoft.EntityFrameworkCore.Design,关闭所有可能锁定文件的IDE,然后终于可以使用了。

请注意,我什至不必运行Enable-Migration命令就可以使它工作……这很神奇。

答案 4 :(得分:0)

如果出于某种原因,您的班级与项目中的连接不存在也会发生。所以右键单击并添加到项目&#39;对此进行排序。