实体框架 4.3 迁移错误

Posted

技术标签:

【中文标题】实体框架 4.3 迁移错误【英文标题】:Entity Framework 4.3 migrations error 【发布时间】:2021-07-01 07:07:55 【问题描述】:

我刚刚安装了 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'.

我为 2 个 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) 中。我尝试在主网站和域项目的上下文中运行更新数据库,但无论哪种方式,我都会遇到相同的错误。

-- 编辑--

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

This walkthrough 提供更多信息

【问题讨论】:

您的问题是 No migrations configuration type was found in the assembly 的最高 Google 结果。这是测试版软件仍然很新。我也会尝试在 MSDN 论坛上发布此内容。 好电话 - social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/… 【参考方案1】:

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

This walkthrough 提供更多信息

【讨论】:

>确保您选择了正确的项目 这是我的问题。确保选择了正确的项目。 我会添加不使用add-migration。只需启用它们并运行项目。【参考方案2】:

有时,即使您启用了迁移,也可能会出现此问题。这意味着配置文件已被删除。在这种情况下,您可以运行

Enable-Migrations -Force 

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

【讨论】:

【参考方案3】:

如果您已启用迁移并且在某些 Windows 更新后才开始看到此错误,请确保您在使用 NuGet 包管理器的所有项目中使用相同版本的实体框架。

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

背景:2016 年 3 月 16 日左右,当我尝试将迁移添加到我已经启用迁移并且之前成功完成迁移的项目时,我开始收到“无迁移配置类型”错误。

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

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

我在进行故障排除时遇到的另一个错误表明配置类型不是从 System.Data.Entity.ModelConfiguration.EntityTypeConfiguration 继承的,即使它是。

这让我相信不同版本的实体框架存在冲突。

分辨率:

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

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

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

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

b.在实体框架的每个版本上单击管理,并确保您的项目使用相同版本的实体框架。 •取消选中您未使用的实体框架版本,并确保您正在使用的实体框架版本已在需要它的项目中进行检查。

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

不过,重新启动 Visual Studio 似乎可以解决这些问题。

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

即使启用了迁移,如果在 Package Manager Console 的下拉菜单中选择了不正确的默认项目,也会出现上述行为。一种非图形化的方法是扩展您正在使用的命令,并使用参数-ProjectName 指定正确的项目名称

Update-Database -Verbose -ProjectName TheCorrectProjectName

你可能仍然会收到类似的警告

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

不过,这个额外的命令行参数为我解决了这个问题。

【讨论】:

以上是关于实体框架 4.3 迁移错误的主要内容,如果未能解决你的问题,请参考以下文章

实体框架代码优先:启用迁移错误

实体框架数据库错误

实体框架迁移错误 - 序列不包含任何元素

如何实现 IDbContextFactory 以用于实体框架数据迁移

了解实体框架启用迁移和上下文

如何为实体框架代码优先迁移设置隔离级别