EF 5启用迁移:在程序集中找不到上下文types

我有4个项目:

Toombu.Entities : all models are there Toombu.DataAccess: Mapping, Repository and ToombuContext Toombu.Logique : Logic of my application Toombu.Web : MVC 4 application. With all others DLL. 

我试图启用Toombu.Web中的迁移,但我有这个错误:

 No context type was found in the assembly 

我如何启用迁移?

在软件包pipe理器控制台中使用-ProjectName选项:

 Enable-Migrations -ProjectName Toombu.DataAccess -StartUpProjectName Toombu.Web -Verbose 

我很惊讶,没有人提到这个问题的明显答案:entity framework需要一个上下文才能启用迁移工作。 OP发布的错误消息表明没有find上下文。 当然,这可能是因为软件包pipe理器控制台没有“看到”上下文 – 在这种情况下,接受的答案是一个可能的解决scheme(另一个解决scheme是我build议,下面)。 但是在任何其他解决scheme工作之前,当前项目(组装)中必须存在上下文。

有一个上下文是什么意思? 这意味着你的项目中必须存在一个从DbContextinheritance的类(在System.Data.Entity中)。 这里是一个例子:

 public class MyDbContext : DbContext { public MyDbContext() { } } 

一定要使用

 using System.Data.Entity; 

在上面的代码访问DbContext类之前,并且您已经使用NuGet获取当前项目的Entity Framework 4.1或更高版本。

如果你一直有一个上下文,但软件包pipe理器控制台不“看”它:在Visual Studio 2013中,您不必使用-ProjectName开关。 而是转到程序包pipe理器控制台(在“查看|其他Windows”列表中可用),然后查看出现在程序包pipe理器控制台可停靠窗口顶部的两个下拉列表。 第一个下拉菜单是Package Source; 第二个是默认项目。 如果您下拉“默认项目”并在您的解决scheme中select一个项目,那么无论您在Package Manager控制台中发出的任何命令都将针对所选项目执行。

更改默认的项目,并从下拉菜单中select启动项目: 在这里输入图像说明

如果有人仍然面临这个问题。 我通过使用下面的命令解决了它:

 Enable-Migrations -ProjectName <YOUR_PROJECT_NAME> -ContextTypeName <YOUR_CONTEXT_NAME> 

不要忘记使用您的上下文名称的完整path。

你dbcontext是在Toombu.DataAccess所以你应该在Toombu.DataAccess启用迁移。

我不得不做两个上述评论的组合。

在包pipe理器控制台中设置默认项目,以及Abhinandan添加-ContextTypeNamevariables到我的完整命令的评论。 所以我的命令如下

 Enable-Migrations -StartUpProjectName RapidDeploy -ContextTypeName RapidDeploy.Models.BloggingContext -Verbose 

我的设置::

  • ProjectName – RapidDeploy
  • BloggingContext(包含DbContext的类,文件在主项目的Models文件夹内)

你需要做的是去模型文件夹,并创build一个名为MyDbContext的新类。

它应该是这样的:

 public class MyDbContext : DbContext { public MyDbContext() { } } 

那么你还需要添加一个对System.Data的引用,那么你也需要通过using System.Data.Entity;添加到你的文章的顶部来调用它using System.Data.Entity;

将默认项目更改为数据访问

将软件包pipe理器控制台中的默认项目下拉列表更改为数据访问,并启用迁移…

这就是一切成功

确保您在使用NuGet包pipe理器的所有项目中使用相同版本的entity framework。

最近的Windows更新可能已经在你的活动项目中安装了更新版本的entity framework。

背景:2016年3月16日左右,我尝试将迁移添加到已经启用迁移并已成功完成迁移的项目,开始出现此错误。

我注意到,在3月10日左右,一个新的entity framework6的稳定版本已经发布。

如果我在enable-migrations命令中指定了-ContextTypeName参数,则出现一个错误,指示已经启用了迁移。

parsing度:

1)工具 – > Nuget包pipe理器 – >pipe理解决scheme的Nuget包

2)(不知道这一步是否有必要,但是..)我更新我的版本的Nuget包pipe理器到最新版本。 此外,更新我的版本的Nuget包pipe理器后,我必须重新启动Visual Studio两次NuGet命令行才能正常工作。

3)工具 – > Nuget包pipe理器 – >pipe理解决scheme的Nuget包 – >search已安装的包 – >typesentity framework

一个。 您可能会看到多个版本的entity framework。

湾 单击每个版本的entity framework上的pipe理,并确保您的项目正在使用相同的entity framework版本。

  • 取消选中您未使用的entity framework的版本,以及您正在使用的entity framework的版本,确保在您需要的项目中对其进行检查。

同样,如步骤2所述,我必须重新启动Visual Studio两次,才能使NuGet Package Manager控制台在更新我的NuGet Package Manager版本后正常工作。 第一次启动控制台时出现错误,第二次运行enable-migrations命令时,“调用带8个参数的createinstancefromexception无法加载文件或程序集EntityFramework”。

然而,重启视觉工作室似乎解决了这些问题。

我一直在得到这个相同的问题。 我甚至尝试过以上的启用迁移,即使我已经完成了。 但它不断给出同样的错误。 然后,我不得不使用强制开关克服这个问题。 我相信这将有助于别人的情况以及可能的解决办法。

强制迁移后,您应该更新您的数据库(确保默认项目设置正确)。 否则,你会得到另一个问题,如显式迁移正在等待。

然后执行你的add-migrations或其他命令,它应该可以工作。

 Enable-Migrations -ProjectName <PROJECT_NAME> -ContextTypeName <FULL_CONTEXT_NAMESPACE.YOUR_CONTEXT_NAME> -force 

感谢您的build议,我把这里所有的解决scheme结合起来解决了这个问题。 起初,我创build了DbContext模型:

  public class MyDbContext: DbContext { public MyDbContext() { } } 

在创build了dbcontext类之后,我使用项目名称运行了enable-migration命令: enable-migrations -ProjectName YourProjectName

由于编译器没有在应用程序中获得“Context”类,因此出现此错误。 所以,你可以通过Add – > Class手动添加它,并用'DbContext'类inheritance它。例如:

 public class MyDbContext : DbContext { public DbSet<Customer> Customer { get; set; } public MyDbContext() { } }