实体框架4.3迁移错误

15

我刚刚安装了EF 4.3-beta1,以便进行迁移操作,但我无法让它正常工作。我遇到的错误是:

PM> Update-Database -Verbose
Using NuGet project 'Project.Domain'.
Using StartUp project 'ProjectWebSite'.
System.InvalidOperationException: No migrations configuration type was found in the assembly 'Project.Domain'.
   at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.FindConfiguration()
   at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.GetMigrator()
   at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore()
   at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
No migrations configuration type was found in the assembly 'Project.Domain'.

我已经给两个EF类添加了一个新列:

public class MasterInstance
{
    public int MasterInstanceId { get; set; }
    [Required] public string HostName { get; set; }
    [Required] public string Name { get; set; } /* <-- THIS IS NEW */
    [Required] public string ConnectionString { get; set; }
    public virtual ICollection<MasterInstanceLocation> MasterInstanceLocations { get; set; }
}

我的DbContext看起来是这样的:
public class ProjectDontext: DbContext, IProjectContext
{
    public IDbSet<Installer> Installers { get; set; }
    public IDbSet<MasterInstance> MasterInstances { get; set; }
    public IDbSet<MasterInstanceLocation> MasterInstanceLocations { get; set; }
}

有什么想法吗?我的EF类和上下文存储在一个独立的程序集中(Project.Domain)。我尝试在主网站和域项目的上下文中运行update-database,但无论哪种方式都会出现相同的错误。

-- 编辑 --

找到解决方案。原来需要为项目启用迁移。您可以在NuGet控制台中运行Enable-Migrations来完成此操作(确保选择了正确的项目 - 对于我来说,这是project.domain项目)。

这个演示提供更多信息。


2
你的问题是 No migrations configuration type was found in the assembly 的谷歌搜索结果中排名最高的。这是一款仍然非常新的测试版软件。我建议你也可以在 MSDN 论坛上发布此问题。 - Yuck
好的呼叫 - http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/39edecbf-267d-4e88-bad9-87c60f330d8a - Matt Roberts
5个回答

19

找到解决方案。原来,您需要为您的项目启用迁移。您可以通过在NuGet控制台中运行 Enable-Migrations 来实现此目的(确保选择了正确的项目 - 对于我来说,这是project.domain项目)。

这份演示文稿提供了更多信息。


6
请确保您选择了正确的项目。这是我的问题。请确保选择了正确的项目。 - R. Salisbury
我建议不要使用 add-migration 命令,只需启用迁移并运行项目即可。 - Pati K

5
有时候,即使您已经启用了迁移,仍然可能会出现此问题。这意味着配置文件已被删除。在这种情况下,您可以运行:
Enable-Migrations -Force 

在包管理器控制台中使用-Force参数可以覆盖迁移配置文件。


1
如果您已经启用了迁移并且在一些 Windows 更新后开始看到此错误,请确保在使用 NuGet 包管理器时对所有项目使用相同版本的 Entity Framework。
最近的 Windows 更新可能会将一个更新的 Entity Framework 版本安装到您的活动项目中。
背景:2016 年 3 月 16 日左右,我在尝试向一个我已经启用了迁移并且之前已经成功进行过迁移的项目中添加迁移时出现了“找不到迁移配置类型”的错误。
我注意到大约在 3 月 10 日发布了 Entity Framework 6 的新稳定版本。
如果我在 enable-migrations 命令中指定了 -ContextTypeName 参数,就会收到指示迁移已启用的错误。
在故障排除期间,我遇到了另一个错误,该错误表明 Configuration 类型未从 System.Data.Entity.ModelConfiguration.EntityTypeConfiguration 继承,尽管它确实是这样的。
这使我相信不同版本的 Entity Framework 发生了冲突。
解决方法:
1) 工具 -> Nuget 包管理器 -> 解决方案的管理 Nuget 包

2) (不确定这一步是否必要,但是..)我更新了Nuget包管理器的版本到最新版本。同时,在更新Nuget包管理器的版本后,我需要重新启动Visual Studio两次才能使NuGet命令行正常工作。

3) 工具 -> Nuget包管理器 -> 管理解决方案的Nuget包 -> 搜索已安装的包 -> 输入Entity Framework

a. 在那里你可能会看到多个Entity Framework的版本。

b. 单击每个Entity Framework版本上的“管理”,确保您的项目正在使用相同版本的Entity Framework。 •取消选中您没有使用的Entity Framework版本,并确保对于您正在使用的Entity Framework版本,它在需要它的所有项目中都被选中。

再次注意,在第2步中,我更新了Nuget包管理器的版本后,我需要重新启动Visual Studio两次才能使NuGet包管理器控制台正常工作。第一次启动控制台时出现错误,第二次运行enable-migrations命令时出现“exception calling createinstancefrom with 8 arguments could not load file or assembly EntityFramework”的错误。

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


0
对我来说,这个错误是因为我在VS2019的“程序包管理器控制台”的“默认项目”中选择了错误的项目。

0
即使启用了迁移,如果在“程序包管理器控制台”下拉菜单中选择了错误的默认项目,则可能会发生所描述的行为。一种非图形化的解决方法是展开您正在使用的命令,并使用参数-ProjectName指定正确的项目名称。
Update-Database -Verbose -ProjectName TheCorrectProjectName

你可能仍然会收到如下警告:

无法确定有效的启动项目。改用项目“TheCorrectProjectName”。您的配置文件和工作目录可能未按预期设置。请使用-StartUpProjectName参数显式设置一个。

尽管如此,对我来说,这个额外的命令行参数解决了这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接