Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在程序集中找不到上下文类型_Asp.net_Entity Framework_Connection String_Data Access Layer_Entity Framework 5 - Fatal编程技术网

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

Asp.net 在程序集中找不到上下文类型,asp.net,entity-framework,connection-string,data-access-layer,entity-framework-5,Asp.net,Entity Framework,Connection String,Data Access Layer,Entity Framework 5,我首先在代码中使用.NET4.0、MVC3和EF5 我的解决方案分为三个项目,其依赖关系如下所示: Project.Web->Project.BLL->Project.DAL Project.DAL层包含my entity framework数据上下文类和所有my entities,但我的启动项目是Project.Web,因此它包含my Web.config、连接字符串和实际的SQL compact数据库 我正在尝试启用迁移,以便在不删除现有数据的情况下向EF模型添加新表。但是,当我运行“启用迁

我首先在代码中使用.NET4.0、MVC3和EF5

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

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

Project.DAL层包含my entity framework数据上下文类和所有my entities,但我的启动项目是Project.Web,因此它包含my Web.config、连接字符串和实际的SQL compact数据库

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

在程序集“Project.Web”中未找到上下文类型。
如果我将启动项目设置为project.DAL,错误将更改为

无法加载程序集“Project.Web”。(如果在Visual Studio中使用代码优先迁移,则如果解决方案的启动项目未引用包含迁移的项目,则可能会发生这种情况。您可以更改解决方案的启动项目或使用-StartUpProjectName参数。)

有人知道为什么会出现这个错误,或者我能做些什么来修复它吗?

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

我发现了类似的帖子:

例如:

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

如果出于某种原因,您的连接类不在项目中,也会发生这种情况。因此,右键单击并“添加到项目”将其排序。

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

您的上下文类必须继承自
DbContext
,如下所示:

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

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

我最终放弃了PackageManager控制台,因为它似乎在使用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
命令来实现这一点。。。这是魔法

请务必放大您的Package Manager控制台窗口,否则它可能位于窗口工具栏的右侧,您会像我一样错过它。有没有办法在某个配置中设置它?我试图在发布到azure时设置自动迁移,但似乎失败了,因为它在启动项目上而不是在数据库上运行update database命令。现在看来很明显:)