Я использую Entity Framework и пытаюсь запустить миграцию базы данных из консоли диспетчера пакетов в Visual Studio. Когда я это сделаю, я получаю следующую ошибку и трассировку стека.Подзапрос возвратил более 1 ошибки значения при использовании Update-Database в Entity Framework
PM> Обновление-База данных - Использование проекта StartUp «Проект». Использование Проект NuGet 'DataModels'. Укажите флаг '-Verbose', чтобы просмотреть операторы SQL , применяемые к целевой базе данных. Целевая база данных : «База данных» (DataSource: Server, Provider: System.Data.SqlClient, Происхождение: Конфигурация). Применение явных миграций: [201612061704158_MigrationName]. Применение явной миграции: 201612061704158_MigrationName. ALTER TABLE [dbo]. [TableName] ADD [ColumnName] [бит] NOT NULL DEFAULT 0 System.Data.SqlClient.SqlException (0x80131904): Подзапрос возвращает более одного значения. Это недопустимо, когда подзапрос следует = ! =, <, < =,>,> = или когда подзапрос используется как выражение. Заявление прекращено. в System.Data.SqlClient.SqlConnection.OnError (SqlException исключения, булевой breakConnection, действия
1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
1 wrapCloseInAction) в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) в системы. Data.SqlClient.TdsParser.TryRun (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader DATASTREAM, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, булева & dataReady) при System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds (String имяМетода, булева асинхронной, Int32 timeout, Boolean asyncWrite) в System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (TaskCompletionSource1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<NonQuery>b__0(DbCommand t, DbCommandInterceptionContext
1 с) по System.Data.Entity.Infrastructure.Interception.InternalDispatcher1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func
3 операции, TInterceptionContext interceptionContext, Действие3 executing, Action
3 выполнены) в System.Data.Entity. Infrastructure.Interception.DbCommandDispatcher.NonQuery (DbCommand команды, DbCommandInterceptionContext interceptionContext) при System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery()
на System.Data.Entity.Migrations.DbMigrator.ExecuteSql (migrationStatement migrationStatement, Соединение DbConnection, DbTransaction транзакции, DbInterceptionContext interceptionContext) при System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql (MigrationStatement migrationStatement, DbConnection соединения, DbTransaction сделки, DbInterceptionContext interceptionContext) в System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal (IEnumerable migrationStatements, DbTransaction сделки, DbInterceptionContext interceptionContext) при System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinNewTransaction (IEnumerable migrationStatements, DbConnection соединение, DbInterceptionContext interceptionContext) на System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal (IEnumerable)) System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Выполнить (Действие операции) на System.Data.Entity.Migrations.DbMigrator.ExecuteStatements (IEnumerable migrationStatements) на System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements (IEnumerable1 migrationStatements) at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, VersionedModel targetModel, IEnumerable
1 операций, IEnumerable pendingMigrations, String targetMigrationId, Строка lastMigrationId)
на System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade (IEnumerable`1 pendingMigrations, Строка targetMigrationId, Строка lastMigrationId)
в System.Data.Entity.Migrations .DbMigrator.UpdateInternal (Стри ng targetMigration) в System.Data.Entity.Migrations.DbMigrator. <> c__DisplayClassc.b__b() в System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists (Action mustSucceedToKeepDatabase) в System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists (Action mustSucceedToKeepDatabase) в системе. Data.Entity.Migrations.DbMigrator.Update (String targetMigration) на System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update (Строка targetMigration) в System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner. Run() в System.AppDomain.DoCallBack (CrossAppDomainDelegate callBackDelegate) по адресу Sys tem.AppDomain.DoCallBack (CrossAppDomainDelegate callBackDelegate)
на System.Data.Entity.Migrations.Design.ToolingFacade.Run (BaseRunner литниковой) в System.Data.Entity.Migrations.Design.ToolingFacade.Update (String targetMigration, Boolean force) в System.Data.Entity.Migrations.UpdateDatabaseCommand. <> c__DisplayClass2. < .ctor> b__0() на System.Data.Entity.Migrations.MigrationsDomainCommand.Execute (Действие команды) ClientConnectionId: 40e2fc22-5bbd-4d83-88f3-ce5b2bc378dc Ошибка Номер: 512, состояние: 1, Класс: 16 Подзапрос возвратил более 1 значения. Этот не разрешен, если подзапрос следует в следующем выражении: =,! =, <, < =,>,> = или , когда подзапрос используется как выражение. Заявление было завершено .
Я не могу понять, что здесь происходит. Выполнение оператора SQL непосредственно работает отлично
ALTER TABLE [dbo].[TableName] ADD [ColumnName] [bit] NOT NULL DEFAULT 0
Это то, что файл миграции выглядит
public partial class MigrationName : DbMigration
{
public override void Up()
{
AddColumn("dbo.TableName", "ColumnName", c => c.Boolean(nullable: false));
}
public override void Down()
{
DropColumn("dbo.TableName", "ColumnName");
}
}
Если я закомментируйте содержимое Up()
в файле миграции, я могу успешно запустить (пусто) миграции.
Кроме того, если я запускаю все миграции, в том числе и эту, против пустой базы данных, все работает нормально. Таким образом, есть некоторые проблемы с данными, которые вызывают ошибку (что ожидается, учитывая сообщение об ошибке).
Я пробовал посмотреть на SQL Server Profiler, чтобы попытаться выяснить, какой SQL выполняется, но ничего не появляется.
У меня около 20 других миграций, которые хорошо работали до этого момента, но этот и предыдущий последовательно выбрасывают эту ошибку.
Кто-нибудь знает, что может быть основной проблемой, или как я могу получить больше информации о том, что происходит не так?
Есть ли триггеры в '[TableName]'? – Blorgbeard
@Blorgbeard Хороший вопрос. Есть, но если я его отброшу, то миграция завершится неудачно. –