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

问题描述 投票:51回答:19

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

如何启用迁移?

c# entity-framework asp.net-mvc-4 ef-migrations
19个回答
89
投票

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

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

1
投票

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

启用 - 迁移-StartUpProjectName Prongs -ContextTypeName Props.Models.MyDbContext -Verbose

控制台返回:

使用StartUp项目'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.
        }
    }
}

1
投票

请按照以下步骤解决此问题

Install-Package EntityFramework-IncludePrerelease

或从Nuget Package Manager安装实体框架

重启visual studio

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

要解决它 - 这个“无上下文”意味着你需要在应用程序的“Model”文件夹中创建类,后缀类似于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()
        {
        }
    }
}

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

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

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

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

0
投票

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

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

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

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

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

解析度:

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

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

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

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

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

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

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

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


0
投票

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

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

0
投票

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

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

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

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

0
投票

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


-1
投票
namespace EntityFrameworkCodeFirst.Module
{
    public class MyDbContext: DbContext
    {
        public MyDbContext()
        {
        }
    }
}

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

Enable-Migrations -ProjectName EntityFrameworkCodeFirst

-1
投票

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

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

-1
投票

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

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

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

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

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

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


-2
投票

为我工作:

 UnInstall-Package EntityFramework 
  • 重新启动Visual Studio

Install-Package EntityFramework

  • 建立项目

126
投票

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

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

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

一定要用

using System.Data.Entity;

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

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


38
投票

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


7
投票

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

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

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


5
投票

您的dbcontext位于Toombu.DataAccess中,因此您应该在Toombu.DataAccess中启用迁移。


2
投票

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

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

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

我的设置::

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

1
投票

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

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

这一切都是成功的


1
投票

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

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

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


1
投票

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

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

Install-Package EntityFramework-IncludePrerelease

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

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

我解决这个问题非常简单。这个“无上下文”意味着您需要在应用程序的“Model”文件夹中创建类,后缀为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>
© www.soinside.com 2019 - 2024. All rights reserved.