32

我首先使用带有代码的 .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.)

有谁知道为什么会导致此错误或我可以做些什么来解决它?

4

5 回答 5

82

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

于 2012-10-23T15:39:54.780 回答
3

我发现了类似的帖子:在单独的程序集中启用带有上下文的迁移?

例子:

enable-migrations -ContextProjectName MyProject.DBContexts -contexttypename MyProject.DBContexts.MyContextName -Verbose
于 2015-11-02T21:47:19.410 回答
1

谁像我一样犯了这个错误:

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

public class DirectorRequestContext : DbContext
{
    public DbSet<DirectorRequest> DirectorRequests { get; set; }
}
于 2016-11-28T13:15:58.993 回答
1

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

我最终放弃了包管理器控制台,因为它似乎使用的是 EF6 而不是 EFCore ......

幸运的是,您可以从普通的 PowerShell 运行这些实体框架命令:

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命令来让它工作......这很神奇。

于 2020-02-08T21:43:08.670 回答
0

如果由于某种原因您的连接类不在项目中,也会发生这种情况。所以右键单击并“添加到项目”可以解决这个问题。

于 2016-09-22T13:54:57.827 回答