Ошибка инициализации базы данных MVC EF5 Framework

Я использую EF 5 и MVC 4.

После первого развертывания проекта (с использованием веб-развертывания) и запуска веб-сайта моя база данных создается автоматически, и я вижу, что созданы таблицы simplemembership. Все мои другие таблицы не. Таблицы 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, но я не могу понять, почему возникает конфликт из-за этой одной таблицы. Любая помощь будет принята с благодарностью.


person Julian Dormon    schedule 24.10.2012    source источник


Ответы (4)


Как и выше, если вы уже запустили таблицу сценариев членства asp-net, вам нужно будет очистить ее, удалив все эти другие таблицы автогенерации. Как только вы это сделаете, вы можете запустить команду update-database -verbose, и вы увидите, что она создает таблицу UserProfile без проблем.

person ZaneDarken    schedule 14.08.2013

Я обнаружил, что проблема была вызвана файлом миграции. Одна из моих моделей включала набор пользовательских профилей, поэтому это заставило EF создать внешний ключ, который, похоже, заставляет EF писать код для создания таблицы. Он не знает, что простое членство, по-видимому, сделает это для этой таблицы.

В любом случае я решил проблему, закомментировав блок таблицы create UserProfile в папке миграции. Я убедился, что заменил его методом AddForeignKey, чтобы сохранить отношения нетронутыми.

Не уверен, что это правильный способ, но он работал.

person Julian Dormon    schedule 24.10.2012
comment
У меня та же проблема (и, надеюсь, такое же решение) - но я не вижу внешних ключей - какой внешний ключ вы добавили? Однако я вижу первичный ключ. Сейчас я просто закомментирую код CreateTable/DropTable в методах Up()/Down(). - person BrainSlugs83; 16.06.2013

Это также может произойти, если у вас уже есть таблицы членства asp-net, созданные ранее, которые пытаются предотвратить случайную потерю учетных данных для всех пользователей.

Отбросьте эти таблицы и представления, и эта ошибка исчезнет.

person Anuj Pandey    schedule 26.03.2013

Была такая же проблема, затем вручную отредактировал скрипт Initialmigration с удаленной таблицей UserProfile вверху и выполнил Update-Database -Verbose. Не удалось, так как существует ограничение внешнего ключа n. Пошел в мою локальную БД удаленную таблицу UserProfile со всеми таблицами, имеющими к ней внешние ключи. Выполнена миграция и создана таблица.

person Chamilgreat    schedule 20.09.2015