C# EF 5启用迁移:在程序集中找不到上下文类型

C# EF 5启用迁移:在程序集中找不到上下文类型,c#,entity-framework,asp.net-mvc-4,entity-framework-migrations,C#,Entity Framework,Asp.net Mvc 4,Entity Framework Migrations,我有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 fo

我有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

如何启用迁移?

您的dbcontext位于
Toombu.DataAccess
中,因此您应该在
Toombu.DataAccess

中启用迁移,在Package Manager控制台中使用-ProjectName选项:

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

我感到惊讶的是,没有人提到这个问题的明显答案:实体框架需要一个上下文才能启用迁移。OP发布的错误消息表明未找到上下文。当然,这可能是因为PackageManager控制台没有“看到”上下文——在这种情况下,可接受的答案是一种可能的解决方案(我建议的另一种解决方案如下)。但在任何其他解决方案工作之前,当前项目(程序集)中必须存在上下文

有语境意味着什么?这意味着项目中必须存在一个从DbContext继承的类(在System.Data.Entity中)。以下是一个例子:

public class MyDbContext : DbContext
{
    public MyDbContext()
    {
    }
}
一定要使用

using System.Data.Entity;
在上面的代码访问DbContext类以及您使用NuGet获取当前项目的Entity Framework 4.1或更高版本之前


如果一直都有一个上下文,但是PackageManager控制台没有“看到”它:在VisualStudio2013中,您不必使用-ProjectName开关。相反,请转到Package Manager控制台(在视图|其他窗口列表中提供),并查看Package Manager控制台可停靠窗口顶部的两个下拉列表。第一个下拉列表用于包源;第二个是默认项目。如果您下拉默认项目并在解决方案中选择一个项目,那么您在Package Manager控制台中发出的任何命令都将针对所选项目执行

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

将package manager控制台中的默认项目下拉列表更改为“数据访问”,并给出“启用迁移…”


全部成功

更改默认项目并从下拉列表中选择启动项目:

如果有人仍面临此问题。我使用以下命令解决了此问题:

Enable-Migrations -ProjectName <YOUR_PROJECT_NAME> -ContextTypeName <YOUR_CONTEXT_NAME>
启用迁移-ProjectName-ContextTypeName

不要忘记使用上下文名称的完整路径。

确保使用NuGet Package Manager的所有项目都使用相同版本的Entity Framework

最近的windows更新可能已将较新版本的Entity Framework安装到活动项目中

背景: 大约在2016年3月16日,当我尝试将迁移添加到一个项目时,我开始出现此错误,在该项目中,我已经启用了迁移并成功地完成了的迁移

我注意到大约在3月10日,EntityFramework6的一个新的稳定版本发布了

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

决议:

1) 工具->Nuget软件包管理器->管理解决方案的Nuget软件包

2) (不确定是否有必要执行此步骤,但…)我已将Nuget Package Manager的版本更新为最新版本。另外,在更新我的Nuget Package Manager版本后,我必须重新启动Visual Studio两次,Nuget命令行才能正常工作

3) 工具->Nuget软件包管理器->管理解决方案的Nuget软件包->搜索已安装的软件包->键入实体框架

a。您可能会看到实体框架的多个版本

b。在每个版本的Entity Framework上单击“管理”,并确保您的项目使用相同版本的Entity Framework

  • 取消选中您未使用的Entity Framework版本,对于您正在使用的Entity Framework版本,请确保在需要它的项目中选中它
同样,如步骤2所述,在更新我的NuGet Package Manager版本后,我必须重新启动visual studio两次,以使NuGet Package Manager控制台正常工作。我第一次启动控制台时出错 第二次运行enable migrations命令时,“使用8个参数调用createinstancefrom时出现异常,无法加载文件或程序集EntityFramework”


然而,重新启动VisualStudio似乎解决了这些问题

我不得不结合上面的两条评论

在PackageManager控制台中设置默认项目,以及在我的完整命令中添加-ContextTypeName变量的注释。所以我的命令如下

Enable-Migrations -StartUpProjectName RapidDeploy -ContextTypeName RapidDeploy.Models.BloggingContext -Verbose
我的设置::

  • 项目名称-RapidDeploy
  • BloggingContext(包含DbContext的类,文件位于主项目的Models文件夹中)

    • 我也遇到了同样的问题。我甚至尝试过上面的启用迁移,尽管我已经这样做了。但它总是给出同样的错误。然后我不得不使用强制开关来克服这个问题。我相信这将有助于其他人的情况,以及这是一个可能的解决办法

      启用强制迁移后,应该更新数据库(确保正确设置了默认项目)。否则,您将遇到另一个问题,如显式迁移挂起

      然后只需执行addmigrations或任何其他命令,就可以了

      Enable-Migrations -ProjectName <PROJECT_NAME> -ContextTypeName <FULL_CONTEXT_NAMESPACE.YOUR_CONTEXT_NAME> -force
      
      启用迁移-ProjectName-ContextTypeName-force
      
      谢谢你的建议,我将这里的所有解决方案结合起来解决了这个问题。首先,我创建了DbContext模型:

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

      创建dbcontext类后,我使用项目名称运行了enable migration命令:启用迁移-ProjectName YourProjectName

      由于编译器未在应用程序中获取“Context”类,因此出现此错误。因此,您可以通过添加-->类手动添加并继承它
      public class MyDbContext : DbContext
          {
              public DbSet<Customer> Customer { get; set; }
              public MyDbContext()
              {
              }
          }
      
      namespace EntityFrameworkCodeFirst.Module
      {
          public class MyDbContext: DbContext
          {
              public MyDbContext()
              {
              }
          }
      }
      
      Enable-Migrations -ProjectName EntityFrameworkCodeFirst
      
      Install-Package EntityFramework-IncludePrerelease
      
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Web;
      using System.Data.Entity;
      
      
      namespace Oceans.Models
      {
          public class MyDbContext:DbContext
          {
              public MyDbContext()
              {
              }
          }
      }
      
      Enable-Migrations -ProjectName <YourProjectName> -ContextTypeName <YourContextName>
      
       UnInstall-Package EntityFramework 
      
      public class MyDbContext : DbContext { public MyDbContext() { } }
      
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Web;
      using System.Data.Entity;
      
      namespace Vidly.Models
      {
          public class MyDbContext : DbContext
          {
              public MyDbContext()
              {
              }
          }
      }
      
      namespace Vidly.Migrations
      {
          using System;
          using System.Data.Entity;
          using System.Data.Entity.Migrations;
          using System.Linq;
      
          internal sealed class Configuration : DbMigrationsConfiguration<Vidly.Models.MyDbContext>
          {
              public Configuration()
              {
                  AutomaticMigrationsEnabled = false;
              }
      
              protected override void Seed(Vidly.Models.MyDbContext context)
              {
                  //  This method will be called after migrating to the latest version.
      
                  //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
                  //  to avoid creating duplicate seed data.
              }
          }
      }
      
      Install-Package EntityFramework-IncludePrerelease
      
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Web;
      using System.Data.Entity;
      
      
      namespace Oceans.Models
      {
          public class MyDbContext:DbContext
          {
              public MyDbContext()
              {
              }
          }
      }
      
      Enable-Migrations -ProjectName <YourProjectName> -ContextTypeName <YourContextName>
      
      Enable-Migrations -StartUpProjectName MyFirstApp -ContextTypeName MyFirstApp.Models.AppDbContext