我有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
如何启用迁移?
答案 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)
答案 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
我的设置::
答案 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)
答案 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版本。
同样,如第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
安装包EntityFramework