73

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

如何启用迁移?

4

27 回答 27

170

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

有上下文是什么意思?这意味着您的项目中必须存在一个继承自 DbContext 的类(在 System.Data.Entity 中)。这是一个例子:

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

确保你使用

using System.Data.Entity;

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

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

于 2014-02-14T06:01:05.743 回答
103

在包管理器控制台中使用 -ProjectName 选项:

Enable-Migrations -ProjectName Toombu.DataAccess -StartUpProjectName Toombu.Web -Verbose
于 2013-05-11T14:35:08.850 回答
42

更改默认项目并从下拉列表中选择启动项目: 在此处输入图像描述

于 2015-07-24T22:17:13.723 回答
22

就我而言,缺少 NuGet 包“Microsoft.EntityFrameworkCore.Tools”

于 2019-12-03T19:35:14.440 回答
12

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

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

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

于 2015-11-25T01:54:31.900 回答
5

你的 dbcontext 在Toombu.DataAccess所以你应该在Toombu.DataAccess.

于 2013-05-11T14:20:23.467 回答
5

我在 Models 目录中创建了一个名为:myData的,代码如下:

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 控制台中运行以下命令:

Enable-Migrations -StartUpProjectName Vidly -ContextTypeName Vidly.Models.MyDbContext -Verbose

控制台返回:

使用启动项目'Vidly'。使用 NuGet 项目'Vidly'。检查上下文是否针对现有数据库...为 Vidly 项目启用了代码优先迁移。启用迁移 -StartUpProjectName Vidly -ContextTypeName Vidly.Models.myData -Verbose

FrameWork 创建了一个 Migrations 目录并在其中编写了一个 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.
        }
    }
}
于 2019-03-07T03:09:01.063 回答
5

请按照以下步骤解决问题

Install-Package EntityFramework-IncludePrerelease

或从 Nuget 包管理器安装实体框架

重启视觉工作室

之后我得到“在程序集中找不到上下文类型”

要解决它 - 这个“无上下文”意味着您需要在应用程序的“模型”文件夹中创建类,其后缀类似于 DbContext ... 就像这个 AppDbContext。您需要使用 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>

我的项目名称是 - MyFirstApp 和 AppDbContext 在模型文件夹内,所以路径就像

Enable-Migrations -StartUpProjectName MyFirstApp -ContextTypeName MyFirstApp.Models.AppDbContext
于 2019-04-14T12:53:04.273 回答
4

在 mosh 教程中,选择了单个用户帐户,这在模板中创建了一个数据库上下文。此外,请确保 EntityFramework 已安装在 Nuget 包管理器中。 在此处输入图像描述

于 2019-05-31T16:01:58.617 回答
3

感谢您的建议,我通过在这里结合所有解决方案解决了这个问题。起初我创建了 DbContext 模型:

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

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

于 2017-05-30T11:30:49.513 回答
2

我必须结合上述两个评论。

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

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

我的设置::

  • 项目名称 - RapidDeploy
  • BloggingContext(包含 DbContext 的类,文件位于主项目的 Models 文件夹中)
于 2017-02-17T04:46:03.143 回答
2

我的问题是链接---->问题 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>
于 2018-09-19T23:41:21.763 回答
1

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

将包管理器控制台中的默认项目下拉菜单更改为数据访问并启用迁移...

这就是所有的成功

于 2014-09-04T08:11:20.283 回答
1

如果您使用 Entity Framework 6 和 Entity Framework Core 都已安装。Entity Framework 6 工具正在运行。

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

于 2021-07-16T07:23:01.103 回答
1

我首先遇到了这个问题: PM> add-migration first

在程序集“MyProjectName”中找不到迁移配置类型。(在 Visual Studio 中,您可以使用包管理器控制台中的 Enable-Migrations 命令添加迁移配置)。

然后我尝试了这个:

PM> Enable-Migrations 在程序集“MyProjectName”中找不到上下文类型。

然后对我来说正确的命令:

PM> Enable-Migrations -ProjectName MyProjectName -ContextTypeName MyProjectName.Data.Context

之后我收到此错误消息,即使 Context 继承自 DbContext

'Context' 类型不继承自 DbContext。DbMigrationsConfiguration.ContextType 属性必须设置为从 DbContext 继承的类型。

然后我安装了 Microsoft.EntityFrameworkCore.Tools

现在可以了,但消息很有趣。我已经尝试过首先添加迁移:D

Entity Framework Core 和 Entity Framework 6 都已安装。Entity Framework Core 工具正在运行。对实体框架 6 使用“EntityFramework6\Enable-Migrations”。Enable-Migrations 已过时。使用 Add-Migration 开始使用迁移。

于 2020-05-21T12:54:52.343 回答
1

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

Uninstall-Package EntityFramework -Force

然后为每个项目安装它:

Install-Package EntityFramework

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

于 2020-02-24T18:48:19.170 回答
0

如何使用实体framework code优先方法更新 mvc 中的表和列

1:工具>包管理器控制台

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

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

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

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

于 2018-03-14T13:13:20.923 回答
0

由于编译器未在您的应用程序中获取“上下文”类,因此出现此错误。因此,您可以通过 Add --> Class 手动添加它并使用 'DbContext' Class 继承它 例如:

public class MyDbContext : DbContext
    {
        public DbSet<Customer> Customer { get; set; }
        public MyDbContext()
        {
        }
    }
于 2017-07-26T12:08:20.267 回答
0

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

public class MyDbContext : DbContext { public MyDbContext() { } }
于 2018-11-28T06:07:31.157 回答
0

确保使用 NuGet 包管理器在所有项目中使用相同版本的实体框架。

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

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

我注意到在 3 月 10 日左右,Entity Framework 6 的新稳定版本已经发布。

如果我在 enable-migrations 命令中指定了 -ContextTypeName 参数,则会收到错误消息,表明迁移已启用。

解析度:

1) 工具 -> Nuget 包管理器 -> 管理 Nuget 包以获取解决方案

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

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

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

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

  • 取消选中您未使用的实体框架版本,并确保您正在使用的实体框架版本在需要它的项目中进行检查。

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

但是,重新启动 Visual Studio 似乎可以解决这些问题。

于 2016-03-16T08:36:44.140 回答
0

enable-migrations -EnableAutomaticMigration:$false 使用此命令,您可以在 Ef 6.3 版本中启用迁移,因为 C# 在 Ef 6.3 版本中启用为默认迁移。

于 2019-11-14T14:59:14.563 回答
0

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

于 2021-05-20T11:56:21.717 回答
0

我遇到过几次这个问题,在我的情况下,我卸载了 EntityFramework nuget 包并安装了 EntityFrameworkCore nuget 包、 entityFramework.design 和 entityframework.tools

于 2020-05-05T18:58:03.670 回答
0

当我禁用身份验证/选择“无身份验证”时,我遇到了同样的错误。我重新制作了我的项目并选择了“个人用户帐户”,但我不再收到错误消息。

于 2021-01-10T20:30:47.353 回答
0

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

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

然后只需执行您的 add-migrations 或任何其他命令,它应该可以工作。

Enable-Migrations -ProjectName <PROJECT_NAME> -ContextTypeName <FULL_CONTEXT_NAMESPACE.YOUR_CONTEXT_NAME> -force
于 2017-04-10T08:09:51.177 回答
-1
namespace EntityFrameworkCodeFirst.Module
{
    public class MyDbContext: DbContext
    {
        public MyDbContext()
        {
        }
    }
}

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

Enable-Migrations -ProjectName EntityFrameworkCodeFirst
于 2018-04-12T11:42:42.253 回答
-2

为我工作:

 UnInstall-Package EntityFramework 
  • 重新启动 Visual Studio

安装包EntityFramework

  • 构建项目
于 2018-09-24T19:11:56.617 回答