2012-10-24 34 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表与所有表具有外键。执行创建的迁移和桌子。