2012-10-24 36 views
3

我使用EF 5和MVC 4MVC框架EF5初始化數據庫錯誤

後,我第一個部署項目(使用網絡部署)和網站推出後,將自動創建我的數據庫,我可以看到的是,簡單成員表格被創建。我所有的其他表都不是。簡單會員表和我的表合併爲一個數據庫。我沒有使用兩個單獨的數據庫。這在我的開發環境中工作正常。

當我去到一個控制器,它列出了另一個表中的數據(不simplemembership的一部分),我收到以下錯誤:

[SqlException (0x80131904): There is already an object named 'UserProfile' in the database.] 
    System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +388 
    System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +688 
    System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4403 
    System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout) +2755286 
    System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) +527 
    System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +290 
    System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement) +247 
    System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements) +202 
    System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable`1 migrationStatements) +19 
    System.Data.Entity.Migrations.DbMigrator.ApplyMigration(DbMigration migration, DbMigration lastMigration) +472 
    System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId) +175 
    System.Data.Entity.Migrations.Infrastructure.MigratorBase.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId) +19 
    System.Data.Entity.MigrateDatabaseToLatestVersion`2.InitializeDatabase(TContext context) +150 
    System.Data.Entity.<>c__DisplayClass2`1.<SetInitializerInternal>b__0(DbContext c) +97 
    System.Data.Entity.Internal.<>c__DisplayClass8.<PerformDatabaseInitialization>b__6() +23 
    System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) +66 
    System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() +225 
    System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input) +208 
    System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action) +235 
    System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +36 
    System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() +71 
    System.Data.Entity.Internal.Linq.InternalSet`1.GetEnumerator() +21 
    System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator() +62 
    System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +446 
    System.Linq.Enumerable.ToList(IEnumerable`1 source) +80 
    ProofPixModels.Controllers.SubscriberController.Index() in SubscriberController.cs:21 
    lambda_method(Closure , ControllerBase , Object[]) +43 
    System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +248 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +39 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.InvokeSynchronousActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +15 
    System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +15 
    System.Web.Mvc.Async.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() +120 
    System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +452 
    System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) +15 
    System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +32 
    System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +230 
    System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +28 
    System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +15 
    System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53 
    System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +15 
    System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +15 
    System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +42 
    System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +15 
    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +14 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288 

顯然有兩種:InitializeDatabase命令怎麼回事,但我想不通爲什麼這一桌的衝突。任何幫助將不勝感激。

回答

2

我發現問題是在遷移文件引起的。我的一個車型包括用戶配置(S)的集合,所以這讓EF創建一個外鍵,這似乎迫使EF編寫代碼來創建表。它不知道這個簡單的成員會明顯地爲這張桌子做這件事。

反正我註釋掉在遷移文件夾中創建用戶配置表塊解決了這個問題。我確實使用AddForeignKey方法替換它以保持關係不變。

不知道這是正確的做法,但它的工作。

+0

我有同樣的問題(也希望同樣的解決方案) - 但我看不出有任何外鍵 - 你什麼添加外鍵?我看到一個主鍵,但 - 現在,我只是要註釋掉向上(在CREATETABLE/DROPTABLE代碼)/向下()方法。 – BrainSlugs83

+0

好吧。這工作。 – BrainSlugs83

1

這也將發生,如果你已經有了先前創建的ASP網會員表,它試圖防止意外失去所有用戶的憑據。

丟棄這些表和視圖,該錯誤消失。

3

同上,如果你已經運行了一個ASP網會員文字表,則需要通過刪除所有這些其他自動代表清理它。一旦你這樣做,你可以運行命令update-database -verbose,你會看到它創建UserProfile表沒有問題。

+0

Ahhhhh。分身! – Zane

0

曾有同樣的問題,然後手動編輯與頂部DROP TABLE用戶配置和執行更新,數據庫-Verbose的Initialmigration腳本。失敗,因爲有n個外鍵約束。去我的本地db刪除UserProfile表與所有表具有外鍵。執行創建的遷移和桌子。