2

我在我的 MVC 项目中使用 Code first Entity Framework 5。今天我对我的领域模型进行了一些更改,并更新了应用程序的其余部分以适应这些新更改。自然,当对域模型进行更改时,您需要更新数据库。我们正在使用代码迁移来做到这一点(即手动迁移)。但是,当我尝试通过包控制台添加新迁移时,出现以下异常:

调用的目标已引发异常。

我尝试将启动项目添加到命令中,但也没有用。我所有的项目都构建了,所以也没有编译器错误。

编辑:此外,无论我做什么,都会发生这种情况:更新数据库或更新数据库与目标迁移。所有人似乎都给了我同样的例外。

这是调用堆栈:

PM> add-migration MyMigrationName
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Data.Entity.Migrations.Infrastructure.AutomaticMigrationsDisabledException: Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration.
   at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
   at System.Data.Entity.MigrateDatabaseToLatestVersion`2.InitializeDatabase(TContext context)
   at System.Data.Entity.Database.<>c__DisplayClass2`1.<SetInitializerInternal>b__0(DbContext c)
   at System.Data.Entity.Internal.InternalContext.<>c__DisplayClass8.<PerformDatabaseInitialization>b__6()
   at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action)
   at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()
   at System.Data.Entity.Internal.LazyInternalContext.<InitializeDatabase>b__4(InternalContext c)
   at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input)
   at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action)
   at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()
   at System.Data.Entity.Internal.InternalContext.ForceOSpaceLoadingForKnownEntityTypes()
   at System.Data.Entity.DbContext.System.Data.Entity.Infrastructure.IObjectContextAdapter.get_ObjectContext()
   at EntityFramework.Audit.AuditLogger..ctor(DbContext dbContext, AuditConfiguration configuration)
   at EntityFramework.Extensions.AuditExtensions.BeginAudit(DbContext dbContext, AuditConfiguration configuration)
   at Project.DataAccessLogic.MyContext..ctor() in c:..\MyContext.cs:line 125
   --- End of inner exception stack trace ---
   at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
   at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at System.Activator.CreateInstance(Type type)
   at System.Data.Entity.Infrastructure.DbContextInfo.<CreateActivator>b__0()
   at System.Data.Entity.Infrastructure.DbContextInfo..ctor(Type contextType, DbProviderInfo modelProviderInfo, AppConfig config, DbConnectionInfo connectionInfo)
   at System.Data.Entity.Infrastructure.DbContextInfo..ctor(Type contextType)
   at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration, DbContext usersContext)
   at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration)
   at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.GetMigrator()
   at System.Data.Entity.Migrations.Design.ToolingFacade.GetPendingMigrationsRunner.RunCore()
   at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
Exception has been thrown by the target of an invocation.

我不确定我应该从哪里开始寻找。

4

10 回答 10

2

当我没有正确设置连接字符串时出现此错误。

确保您的 Web.config 中的以下内容正确:

  1. 数据源
  2. 初始目录
  3. 用户身份
  4. 密码
于 2014-05-20T19:52:59.963 回答
1

有点晚了,但也许这对某人有帮助。

您可以检查几件事:

  • 确保您连接到正确的数据库:确保您在控制台Default project下拉列表中选择了正确的项目,或明确使用参数-StartUpProjectName。此项目必须在其设置中包含正确的连接字符串。您还可以显式设置-ConnectionString参数。

  • 如果您的解决方案有一个启动项目,即使您在控制台Default project下拉列表或参数中声明了不同的项目,控制台也会使用其连接字符串-StartUpProjectName。确保您在解决方案中有正确的启动项目。另一种方法是Multiple startup projects在您的解决方案配置选项中进行选择。在这种情况下,控制台将接受您提供的值,而不是在解决方案启动项目中查找连接字符串。

  • 也许您当前的数据库与您当前的上一次迁移(您尝试生成的新迁移之前的迁移)不同步。尝试运行Get-Migrations以查看当前应用到数据库的迁移。如果它不是最新的,Update-Database请使用参数运行-SourceMigration并将-TargetMigration其更新为最新的迁移。

于 2016-10-11T18:40:51.693 回答
1

Table-First update/generate from model 有同样的问题。解决方案是将 app.config 连接字符串中的点替换为 SQL Server 实例的实际机器名称。

于 2016-10-11T13:48:06.210 回答
1

我通过将实体框架NuGet 包更新到版本 3.1.3 解决了这个问题,即:

  • Microsoft.EntityFrameworkCore.Tools
  • Microsoft.AspNetCore.Identity.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.SqlServer
于 2020-05-09T08:54:18.190 回答
0

由于源代码中的分支,我得到了异常。

  1. 切换到分支功能
  2. 创建了代码迁移。
  3. 对数据库应用更改。
  4. 切换到默认值

项目中没有代码迁移,但数据库包含有关它的信息。

于 2014-03-30T09:45:47.563 回答
0

即使__Migrations表和 /Migrations cs 文件同步,我也遇到了这个问题。最近也没有进行迁移。我用Add-Migration "Anything". 然后我只是删除了新搭建的空 CS 和设计器文件。

于 2014-07-22T17:13:32.510 回答
0

我通过添加 --context 并指定 db 上下文类名来解决此问题。

于 2020-05-05T07:17:03.243 回答
0

例外是因为以下需要是相同的版本。

  1. Microsoft.EntityFrameworkCore.SqlServer
  2. Microsoft.EntityFrameworkCore.Tools
  3. Microsoft.EntityFrameworkCore

因此,无论您使用什么版本,只要确保它们匹配,您就可以开始使用了。

于 2021-08-06T20:18:47.357 回答
0

使用以下最新稳定版本解决了我的问题。

Microsoft.EntityFrameworkCore.SqlServer (5.0.0)
Microsoft.EntityFrameworkCore.Tools (5.0.0)
于 2021-05-01T21:06:37.630 回答
0

将“Microsoft.EntityFrameworkCore.SqlServer”和“Microsoft.EntityFrameworkCore.Tools”更新到最新的框架版本(dotnet5、dotnet6 等)并再次运行迁移。在我的情况下,然后遇到'找到多个 DbContext。指定使用哪一个。对 PowerShell 命令使用“-Context”参数,对 dotnet 命令使用“--context”参数。”,然后我使用 Get-DbContext 获取所涉及的上下文类,然后我指定目标 conext 类,如“add-迁移 InitialIdentityServerMigration -Context PersistedGrantDbContext'

于 2022-01-17T21:29:08.953 回答