程序集中未找到上下文类型。

33

我正在使用.NET 4.0、MVC3和EF5与代码优先的方式。

我的解决方案分为三个项目,其依赖关系如下:

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

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

我尝试启用迁移,以便在不清除现有数据的情况下向我的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.)

有没有人知道这个错误是什么原因引起的或者我可以做些什么来修复它?

5个回答

82

我最终在这个问题的答案中找到了解决方法。基本上,在“程序包管理器控制台”中有一个“默认项目”下拉菜单。您需要将其设置为包含您的EF上下文的项目。


11
确保扩大您的程序包管理器控制台窗口,否则它可能会偏离窗口工具栏的右侧,并且您会像我一样错过它。请注意不要改变原来的意思。 - Steve
有没有办法在某个配置中设置这个?我正在尝试在发布到 Azure 时设置自动迁移,但似乎失败了,因为它在启动项目上运行 update-database 命令而不是 DAL。 - amhed
1
谢谢。现在看起来很明显 :) - JMG

3

1

如果你犯了和我一样的错误:

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

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

1

以上其他答案都没有回答我的问题。

最终我放弃了程序包管理器控制台,因为它似乎在使用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命令就能让它工作……这是魔法。

0

如果由于某些原因导致包含连接的类不在项目中,也会出现这种情况。因此,请右键单击并将其“添加到项目”以解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接