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

NOr*_*NOr 54 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.
Run Code Online (Sandbox Code Playgroud)

我试图在Toombu.Web中启用迁移,但我有这个错误:

No context type was found in the assembly
Run Code Online (Sandbox Code Playgroud)

如何启用迁移?

Jaz*_*mov 135

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

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

public class MyDbContext : DbContext
{
    public MyDbContext()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

一定要用

using System.Data.Entity;
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我也觉得很棒.@Jazimov,你是我认为真正的英雄. (2认同)

hVo*_*stt 92

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

Enable-Migrations -ProjectName Toombu.DataAccess -StartUpProjectName Toombu.Web -Verbose
Run Code Online (Sandbox Code Playgroud)

  • 或者在PM控制台顶部的"默认项目:"下拉列表中选择正确的项目(在VS2013中 - 在早期版本中不确定) (37认同)
  • 这应该可以解决这个问题:Enable-Migrations -ContextAssemblyName Toombu.DataAccess -ProjectName Toombu.Web -Verbose (3认同)
  • 我认为这里有一个错误, -ProjectName Toombu.DataAccess 将启用此项目中的迁移,而不是根据需要在 Toombu.Web 中启用。 (2认同)
  • 第一步是先检查<b>上下文文件</b>是否已添加到项目中。 (2认同)

Sad*_*aie 39

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


小智 15

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

  • 哦,是的,宝贝!就是那个。 (2认同)

小智 8

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

Enable-Migrations -ProjectName <YOUR_PROJECT_NAME> -ContextTypeName <YOUR_CONTEXT_NAME>
Run Code Online (Sandbox Code Playgroud)

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


Buk*_*mi 6

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


Kir*_*nov 5

您的dbcontext是,Toombu.DataAccess因此您应该启用迁移Toombu.DataAccess.


小智 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()
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用以下命令重建应用程序:control-shift-b

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

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

控制台返回:

使用启动项目“Vidly”。使用 NuGet 项目“Vidly”。检查上下文是否针对现有数据库...为项目 Vidly 启用了 Code First 迁移。启用迁移 -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.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

请按照以下步骤解决问题

Install-Package EntityFramework-IncludePrerelease
Run Code Online (Sandbox Code Playgroud)

或从 Nuget Package Manager 安装实体框架

重新启动视觉工作室

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

要解决这个问题 - 这个“无上下文”意味着您需要在应用程序的“模型”文件夹中创建类,其后缀如 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()
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

之后在包管理器上运行以下命令:

Enable-Migrations -ProjectName <YourProjectName> -ContextTypeName <YourContextName>
Run Code Online (Sandbox Code Playgroud)

我的项目名称是 - MyFirstApp 和 AppDbContext 位于模型文件夹内,因此路径就像

Enable-Migrations -StartUpProjectName MyFirstApp -ContextTypeName MyFirstApp.Models.AppDbContext
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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