2013-08-26 58 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將其更新爲最新的遷移。

相關問題