繁体   English   中英

实体框架 4.3 迁移错误

[英]Entity Framework 4.3 migrations error

我刚刚安装了 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 项目)。

本演练提供了更多信息

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

本演练提供了更多信息

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

Enable-Migrations -Force 

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

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

最近的 Windows 更新可能已将较新版本的实体框架安装到您的活动项目中。

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

我注意到 3 月 10 日左右,实体框架 6 的新稳定版本已经发布。

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

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

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

解决:

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

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

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

一种。 您可能会在那里看到多个版本的实体框架。

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

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

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

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

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

Update-Database -Verbose -ProjectName TheCorrectProjectName

您可能仍会收到类似警告

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM