EF5启用-迁移: 在程序集中没有找到上下文类型

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

我尝试在 东部,网络中启用迁移,但是出现了以下错误:

No context type was found in the assembly

如何启用迁移?

168680 次浏览

Dbcontext 在 Toombu.DataAccess中,因此应该在 Toombu.DataAccess中启用迁移。

在 Package Manager 控制台中的 use-ProjectName 选项:

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

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

有上下文是什么意思?这意味着您的项目中必须存在一个从 DbContext (在 System 中)继承的类。百科。实体)。这里有一个例子:

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

一定要用

using System.Data.Entity;

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

如果您一直都有一个上下文,但是包管理器控制台没有“看到”它: 在 Visual Studio 2013中,您不必使用-ProjectName 开关。相反,转到 Package Manager Console (在 View | Other Windows 列表中可用) ,查看在 Package Manager Console 停靠窗口顶部出现的两个下拉列表。第一个下拉列表用于 PackageSource; 第二个下拉列表用于 DefaultProject。如果您下拉 Default Project 并在解决方案中选择一个项目,那么您在 Package Manager 控制台中发出的任何命令都将对选定的项目执行。

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

将包管理器控制台中的默认项目下拉菜单更改为 资料存取,并提供启用迁移..。

这就是成功

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

如果还有人面临这个问题,我用以下命令解决了:

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

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

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

最近的 Windows 更新可能已经在活动项目中安装了较新版本的实体框架。

背景: 大约在2016年3月16日,我开始得到这个错误时,试图添加迁移到一个项目,我已经启用了迁移,并成功地完成了迁移。

我注意到,大约在3月10日,一个新的稳定版本的实体框架6已经发布。

如果我在 able-miations 命令中指定了-ContextTypeName 参数,就会得到一个错误,指示迁移已经启用。

决心:

1) Tools-> Nuget Package Manager-> Manage Nuget Packages for Solution

2)(不确定这一步是否必要,但是。.)我更新了我的版本的 Nuget 软件包管理器的最新版本。此外,在更新了我的 NuGet Package Manager 版本之后,我必须重新启动 Visual Studio 两次,才能使 NuGet 命令行正常工作。

3) Tools-> Nuget package Manager-> Manage Nuget Packages for Solution-> Search Installated package-> Type Entity Framework

您可能会在那里看到不止一个实体框架版本。

在每个版本的实体框架上单击“管理”,并确保您的项目使用相同版本的实体框架。

  • 取消选中您不使用的实体框架的版本,并且对于您正在使用的实体框架的版本,请确保在需要它的项目中对它进行了选中。

同样,如步骤2所述,在更新了我的 NuGet Package Manager 版本之后,我必须重新启动 Visual Studio 两次才能让 NuGet Package Manager Console 正常工作。第一次启动控制台时出错 第二次运行启用迁移命令时,“异常调用具有8个参数的 createinstancefrom 无法加载 file 或程序集 EntityFramework”。

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

我不得不把上面的两条评论结合起来。

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

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

我的设置:

  • ProjectName-RapidDeploy
  • BloggingContext (包含 DbContext 的类,文件位于 Main 项目的 Model 文件夹中)

我也遇到过同样的问题。我甚至在上面尝试过启用迁移,尽管我已经这样做了。但它总是出现同样的错误。然后我不得不使用 力量开关来克服这个问题。我相信这将有助于其他人的情况下,以及它的一个可能的工作围绕。

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

然后只需执行您的添加迁移或任何其他命令,它应该工作。

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

谢谢你的建议,我通过把所有的解决方案结合在一起解决了这个问题。首先,我创建了 DbContext 模型:

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

在创建了 dbcontext 类之后,我使用项目 Name: 激活-迁移-ProjectName YourProjectName 运行了启用迁移命令

由于编译器没有在应用程序中获取“ Context”类而导致此错误。因此,您可以通过 Add-> Class 手动添加它,并使用‘ DbContext’Class 继承它 例如:

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

如何使用实体 framework code第一种方法更新 mvc 中的表和列

工具 > 包管理器控制台

2: 选择存在上下文类的当前项目

3: 使用以下命令启用迁移 PM > enable-migrations

4: 使用以下命令添加迁移文件夹名称 PM > add-migration MyMigrationName

4: 现在按照命令更新数据库 PM > update-database

namespace EntityFrameworkCodeFirst.Module
{
public class MyDbContext: DbContext
{
public MyDbContext()
{
}
}
}

如果在一个解决方案中有多个项目,则必须使用以下命令:-

Enable-Migrations -ProjectName EntityFrameworkCodeFirst

我的问题是链接—— > 问题1

我用一个简单的命令行就解决了这个问题

Install-Package EntityFramework-IncludePrerelease

在那之后,我需要面对另一个问题,比如:

“在程序集中未找到上下文类型”

我很容易就解决了。这个“无上下文”意味着你需要在你的应用程序的“模型”文件夹中创建类,后缀为 DbContext... 像这个 MyDbContext。 在那里您需要包括一些库 使用 System.Data.Entity;

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
  • 重新启动 VisualStudio

安装-包 EntityFramework

  • 建立项目

添加一个继承 DbContext的类解决了我的问题:

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

我在 Model 目录中创建了一个名为: 我的数据同学们,代码如下:

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()
{
}
}
}

重建应用程序: control-shift-b

然后在 nuGet 控制台中运行以下命令:

启用-迁移-启动项目名 Vid-ContextTypeName Vid. Models.MyDbContext-详细

控制台返回:

使用 StartUp 项目“视觉化”。 使用 NuGet 项目“视觉化”。 检查上下文是否针对现有数据库..。 为项目启用代码优先迁移。 启用-迁移-StartUpProjectName Vid-ContextTypeName Vid. Models.myData-详细

FrameWork 创建了一个迁移目录,并在其中编写了一个 configuration.cs 模板,代码如下:

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

或从 Nuget Package Manager 安装实体框架

重启视觉工作室

之后我得到“在汇编中没有找到上下文类型”

为了解决这个问题-这个“无上下文”意味着你需要在你的应用程序的“模型”文件夹中创建类,后缀像 DbContext... 像这个 AppDbContext。这里需要包含一些使用 System 的库。百科。实体;

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()
{
}
}
}

然后在 Package Manager 上运行以下命令:

Enable-Migrations -ProjectName <YourProjectName> -ContextTypeName <YourContextName>

我的项目名称是-MyFirstApp 和 AppDbContext 是在模型文件夹中,所以路径如下

Enable-Migrations -StartUpProjectName MyFirstApp -ContextTypeName MyFirstApp.Models.AppDbContext

在 mosh 教程中,选择单个用户帐户,在模板中创建一个 db 上下文。 另外,确保在 Nuget 包管理器中安装了 EntityFramework。 enter image description here

Able-mobilations-EnableAutomaticImmigration: $false 使用这个命令,您可以在 Ef 6.3版本中启用迁移,因为 C # 在 Ef 6.3版本中作为默认迁移启用。

在我的例子中,NuGet 包“ Microsoft.EntityFrameworkCore.Tools”不见了

使用包管理器,您需要重新安装实体框架:

Uninstall-Package EntityFramework -Force

然后为每个项目安装它:

Install-Package EntityFramework

然后不要忘记重新启动工作室。

我曾经遇到过几次这样的问题,我卸载了 EntityFramework 的 nuget 包,安装了 EntityFrameworkCore 的 nuget 包,entityFramework.design 和 EntityFramework.tools

我先遇到这个问题: PM > 添加-迁移优先

在程序集“ MyProjectName”中没有找到迁移配置 type。(在 VisualStudio 中,可以使用来自 PackageManager 控制台的“启用-迁移”命令添加迁移配置)。

然后我试了这个:

PM > 启用-迁移 在程序集“ MyProjectName”中未找到上下文类型。

那么对我来说正确的命令是:

PM > 启用-迁移-ProjectName MyProjectName-ContextTypeName MyProjectName. Data. Context

之后,我得到了这个错误消息,即使 Context 继承自 DbContext

类型“ Context”不从 DbContext 继承。DbMigationsConfiguration.ContextType 属性必须设置为从 DbContext 继承的类型。

然后我安装了 工具

但是这个消息很有趣,我已经在第一次尝试添加迁移了: D

实体框架核心和实体框架6都已安装。实体框架核心工具正在运行。对实体框架6使用“ Enable-Migations”。 启用-迁移已过时。请使用添加-迁移开始使用迁移。

当我禁用身份验证/选择“无身份验证”时,我得到了相同的错误。我重新制作了我的项目,并选择了“个人用户帐户”,我没有得到的错误了。

当我遇到同样的问题时,我发现我已经在解决方案资源管理器中重命名了我的项目。 我需要在记事本中打开项目,并将旧名称更改为新名称。

如果同时使用实体框架6和实体框架核心,则表示已安装。实体框架6工具正在运行。

对实体框架核心使用 EntityFrameworkCore\Enable-Migrations,与添加迁移和更新数据库相同。

OPs 问题是针对 EF5的,我在 EF6也有同样的问题,而且我的经验也非常相似。这里的多个答案都引用了 EntityFrameworkCore,但使用它对我来说是一个巨大的误导。

似乎很多因素都会导致 OPs 错误; 我认为 JazimovSadjad Khazaie都提出了对 EF 和 EFCore 都有用的好的解决方案。然而,当我在 EF6旁边安装 EFCore 时,实际上导致了这个问题。似乎我现有的 EF6代码库使用的是 EF6迁移,并且在安装了 EntityFrameworkCore 包之后,我得到了 No context type was found in the assembly错误,因为 EFCore add-migration命令正在运行。

当我删除 EntityFrameworkCore 包时,问题就消失了。

注意: 有时候我会收到一个警告,当我运行 add-migration时,EntityFrameworkCore 和 EntityFramework 都被安装了,但并非总是如此。可以确定的一个方法是: 尝试 enable-migrations,它可以在 EntityFramework 中使用,但是不可用(或者不必要) 用 EntityFrameworkCore

在 ModelsFolder 中创建一个名为 MyDBContext 的文件

using System.Data.Entity;




namespace VSR.Models
{
public class MyDbContext: DbContext
{
public MyDbContext()
{


}
}
}

现在尝试执行 Enable-migrations。它将工作。