EF 5启用 - 迁移:在程序集中未找到上下文类型

时间:2013-05-11 14:09:02

标签: c# entity-framework asp.net-mvc-4 ef-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 found in the assembly

如何启用迁移?

27 个答案:

答案 0 :(得分:123)

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

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

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

请务必使用

using System.Data.Entity;

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

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

答案 1 :(得分:87)

在Package Manager控制台中使用-ProjectName选项:

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

答案 2 :(得分:37)

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

答案 3 :(得分:7)

如果有人还在面对这个问题。我使用以下命令解决了它:

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

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

答案 4 :(得分:5)

您的dbcontext位于Toombu.DataAccess所以您应该在Toombu.DataAccess中启用迁移。

答案 5 :(得分:2)

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

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

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

我的设置::

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

答案 6 :(得分:1)

我的问题是链接----> problem1

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

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>

答案 7 :(得分:1)

请按照以下步骤解决问题

Install-Package EntityFramework-IncludePrerelease

或从Nuget Package Manager安装实体框架

重新启动Visual Studio

此后,我得到“程序集中未找到上下文类型”

要解决此问题-此“无上下文”表示您需要在应用程序的“模型”文件夹中创建类,其后缀如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

答案 8 :(得分:1)

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

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

启用迁移-Vidly StartUpProjectName -ContextTypeName Vidly.Models.MyDbContext -Verbose

控制台返回了

使用“ Vidly”启动项目。 使用NuGet项目“有效”。 检查上下文是否针对现有数据库... 为项目Vidly启用了代码优先迁移。 Enable-Migrations -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.
        }
    }
}

答案 9 :(得分:1)

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

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

这一切都取得了成功

答案 10 :(得分:1)

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

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

创建dbcontext类之后,我运行了带项目名称的enable-migration命令: enable-migrations -ProjectName YourProjectName

答案 11 :(得分:0)

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

答案 12 :(得分:0)

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

对 Entity Framework Core 使用 EntityFrameworkCore\Enable-Migrations。与添加迁移和更新数据库相同。

答案 13 :(得分:0)

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

答案 14 :(得分:0)

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

答案 15 :(得分:0)

我首先遇到了这个问题: PM>首先添加迁移

在程序集“ MyProjectName”中没有找到

没有迁移配置类型。 (在Visual Studio中,您可以使用Package Manager控制台中的Enable-Migrations命令来添加迁移配置。)

然后我尝试了这个:

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

然后选择适合我的命令:

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

此后,即使Context从DbContext继承,我仍然收到此错误消息

类型“上下文”不继承自DbContext。必须将DbMigrationsConfiguration.ContextType属性设置为从DbContext继承的类型。

然后我安装了 Microsoft.EntityFrameworkCore.Tools

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

同时安装了Entity Framework Core和Entity Framework 6。实体框架核心工具正在运行。对实体框架6使用'EntityFramework6 \ Enable-Migrations'。 Enable-Migrations已过时。使用添加迁移开始使用迁移。

答案 16 :(得分:0)

我几次遇到此问题,在我的情况下,我卸载了EntityFramework nuget软件包并安装了EntityFrameworkCore nuget软件包,entityFramework.design和EntityFramework.tools

答案 17 :(得分:0)

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

Uninstall-Package EntityFramework -Force

然后为每个项目安装它:

Install-Package EntityFramework

然后别忘了重新启动Studio。

答案 18 :(得分:0)

就我而言,NuGet包“ Microsoft.EntityFrameworkCore.Tools”丢失了

答案 19 :(得分:0)

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

答案 20 :(得分:0)

确保您使用NuGet包管理器在所有项目中使用相同版本的Entity Framework。

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

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

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

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

分辨率:

1)工具 - &gt; Nuget包管理器 - &gt;管理解决方案的Nuget包

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

3)工具 - &gt; Nuget包管理器 - &gt;管理解决方案的Nuget包 - &gt;搜索已安装的软件包 - &gt;类型实体框架

一个。您可能会在那里看到多个版本的Entity Framework。

湾单击每个版本的Entity Framework上的Manage,确保您的项目使用的是Entity Framework的SAME版本。

  • 取消选中您未使用的Entity Framework版本以及您正在使用的Entity Framework版本,确保在需要它的项目中检查它。

同样,如第2步所述,我必须重新启动visual studio两次,以便在更新我的NuGet软件包管理器版本后让NuGet软件包管理器控制台正常工作。第一次启动控制台时出错了 &#34;异常调用带有8个参数的createinstancefrom无法加载文件或程序集EntityFramework&#34;第二次运行enable-migrations命令时。

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

答案 21 :(得分:0)

我遇到了同样的问题。即使我已经做过,我甚至尝试过以上启用迁移。但它一直给出同样的错误。然后我不得不使用 force 开关来克服这个问题。我相信这将有助于其他人的案件以及可能的解决方案。

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

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

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

答案 22 :(得分:0)

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

1:工具&gt;包管理器控制台

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

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

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

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

答案 23 :(得分:0)

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

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

答案 24 :(得分:-1)

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

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

答案 25 :(得分:-1)

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

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

Enable-Migrations -ProjectName EntityFrameworkCodeFirst

答案 26 :(得分:-2)

为我工作:

 UnInstall-Package EntityFramework 
  • 重新启动Visual Studio

安装包EntityFramework

  • 构建项目