C# EF 5启用迁移:在程序集中找不到上下文类型
我有4个项目: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
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