1

У меня есть база данных Azure SQL (V12), которую я использую с миграциями EF6 и db. Раньше я успешно выполнял изменения базы данных с миграциями (с Add-Migration и Update-Database). Недавно я попытался выполнить другое изменение и был встречен с исключением null ref при выполнении команды Add-Migration.Невозможно создать новую миграцию EF в базе данных Azure SQL

Я пробовал все виды обходных решений, но я, кажется, получаю эту ошибку независимо. Даже когда я пытаюсь создать пустую миграцию (без изменений), я все равно получаю эту ошибку. Есть ли способ отладить эту проблему, или кто-нибудь может понять, что это значит? Благодаря!

EDIT: Я использовал инструмент миграции sql для копирования базы данных на виртуальную машину SQL Server 2014, и миграция прошла нормально - возможно ли, что это проблема SQL Azure V12?

Вот трассировки стека:

System.NullReferenceException: Object reference not set to an instance of an object. 
    at System.Data.SqlClient.TdsParser.TrySkipRow(_SqlMetaDataSet columns, Int32 startCol, TdsParserStateObject stateObj) 
    at System.Data.SqlClient.TdsParser.TrySkipRow(_SqlMetaDataSet columns, TdsParserStateObject stateObj) 
    at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) 
    at System.Data.SqlClient.SqlDataReader.TryCloseInternal(Boolean closeReader) 
    at System.Data.SqlClient.SqlDataReader.Close() 
    at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) 
    at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds, Boolean describeParameterEncryptionRequest) 
    at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) 
    at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) 
    at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) 
    at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) 
    at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) 
    at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<Reader>b__c(DbCommand t, DbCommandInterceptionContext`1 c) 
    at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed) 
    at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand command, DbCommandInterceptionContext interceptionContext) 
    at System.Data.Entity.Internal.InterceptableDbCommand.ExecuteDbDataReader(CommandBehavior behavior) 
    at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) 
    at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) 
    at System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues) 
    at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__6() 
    at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) 
    at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__5() 
    at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation) 
    at System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) 
    at System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0() 
    at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext() 
    at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source) 
    at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__3[TResult](IEnumerable`1 sequence) 
    at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 query, Expression queryRoot) 
    at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[TResult](Expression expression) 
    at System.Data.Entity.Internal.Linq.DbQueryProvider.Execute[TResult](Expression expression) 
    at System.Linq.Queryable.Count[TSource](IQueryable`1 source, Expression`1 predicate) 
    at System.Data.Entity.Migrations.History.HistoryRepository.QueryExists(String contextKey) 
    at System.Data.Entity.Migrations.History.HistoryRepository.Exists(String contextKey) 
    at System.Data.Entity.Migrations.History.HistoryRepository.GetPendingMigrations(IEnumerable`1 localMigrations) 
    at System.Data.Entity.Migrations.DbMigrator.GetPendingMigrations() 
    at System.Data.Entity.Migrations.DbMigrator.Scaffold(String migrationName, String namespace, Boolean ignoreChanges) 
    at System.Data.Entity.Migrations.Design.MigrationScaffolder.Scaffold(String migrationName, Boolean ignoreChanges) 
    at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Scaffold(MigrationScaffolder scaffolder) 
    at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Run() 
    at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate) 
    at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate) 
    at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner) 
    at System.Data.Entity.Migrations.Design.ToolingFacade.Scaffold(String migrationName, String language, String rootNamespace, Boolean ignoreChanges) 
    at System.Data.Entity.Migrations.AddMigrationCommand.Execute(String name, Boolean force, Boolean ignoreChanges) 
    at System.Data.Entity.Migrations.AddMigrationCommand.<>c__DisplayClass2.<.ctor>b__0() 
    at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command) 
+0

- это ваша консоль диспетчера пакетов, ориентированная на правильный проект? – Claies

+0

@Claies yep, просто дважды проверил его, нацелив на правильный проект – codechinchilla

+0

Похоже, что это, вероятно, ошибка в Entity Framework. Не могли бы вы открыть вопрос на нашем сайте CodePlex (и включить шаги для воспроизведения проблемы), чтобы мы могли его отладить и исправить. https://entityframework.codeplex.com/WorkItem/Create –

ответ

0

Я все еще надеясь, что кто-то сможет опубликовать правильное решение - в то же время, если кто-то имеет эту проблему, вот как я могу временно решить Это.

Основная проблема заключается в том, что EF не может создать миграцию для базы данных SQL Azure V12, где была выполнена предыдущая миграция. При выполнении команды Add-Migration происходит NRE (без большой полезной информации).

После некоторых экспериментов я обнаружил, что могу скопировать схему из моего db и данных из таблиц _MigrationHistory в экземпляр SQL Server 2014 и выполнить команду Add-Migration для этой оболочки db, чтобы сгенерировать классы миграции. После этого я перенаправляю базу данных Azure SQL и запускаю Update-Database для выполнения миграции. Это, безусловно, НЕ идеально, но будет работать как разрыв в пробеле, пока я не найду реальное решение.

+0

Какой поставщик услуг вы используете? Это последняя версия System.Data.SqlClient? –

+0

@TorstenGrabs - кивок, это последняя версия System.Data.SqlClient – codechinchilla