2013-08-26 52 views
2

我在我的MVC项目中使用代码第一个实体框架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. 

我不知道我应该在哪里开始寻找。

+0

您是否将'DbMigrationsConfiguration.AutomaticMigrationsEnabled'设置为true? – Nilesh

+0

不,我们正在手动应用代码迁移,以便将参数设置为false。 – Ruudt

+0

您的数据是否在一个单独的项目中访问?如果有的话试试'Add-Migration -StartUpProjectName'你的DAL项目“MyNewMigration' – Thewads

回答

0

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

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

代码迁移是项目不存在,但该数据库包含它的信息。

2

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

确保以下在你的web.config正确:

  1. 数据源
  2. 初始目录
  3. 用户ID
  4. 密码
0

我有这个问题,即使__Migrations表和/ Migrations cs文件同步。最近也没有迁移过。我用Add-Migration "Anything"“固定”它。然后,我刚刚删除了新搭建的空CS和设计器文件。

0

与Table-First更新/从模型生成相同的问题。解决方案是将app.config连接字符串中的点替换为SQL Server实例的实际计算机名称。

0

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

有几件事情你可以检查:

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

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

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

相关问题