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.
我试图在Toombu.Web中启用迁移,但我有这个错误:
No context type was found in the assembly
如何启用迁移?
Jaz*_*mov 135
我很惊讶没有人提到这个问题的明显答案:在启用迁移之前,实体框架需要一个上下文.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控制台中发出的任何命令都将针对所选项目执行.
hVo*_*stt 92
在Package Manager控制台中使用-ProjectName选项:
Enable-Migrations -ProjectName Toombu.DataAccess -StartUpProjectName Toombu.Web -Verbose
小智 8
如果有人仍然面临这个问题.我使用以下命令解决了它:
Enable-Migrations -ProjectName <YOUR_PROJECT_NAME> -ContextTypeName <YOUR_CONTEXT_NAME>
不要忘记使用上下文名称的完整路径.
小智 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 控制台中运行以下命令:
启用迁移 -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.
        }
    }
}
小智 5
请按照以下步骤解决问题
Install-Package EntityFramework-IncludePrerelease
或从 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()
        {
        }
    }
}
之后在包管理器上运行以下命令:
Enable-Migrations -ProjectName <YourProjectName> -ContextTypeName <YourContextName>
我的项目名称是 - MyFirstApp 和 AppDbContext 位于模型文件夹内,因此路径就像
Enable-Migrations -StartUpProjectName MyFirstApp -ContextTypeName MyFirstApp.Models.AppDbContext
小智 5
如果您使用 Entity Framework 6 和 Entity Framework Core 均已安装。Entity Framework 6 工具正在运行。
用于EntityFrameworkCore\Enable-Migrations实体框架核心。与添加迁移和更新数据库相同。
| 归档时间: | 
 | 
| 查看次数: | 96931 次 | 
| 最近记录: |