Исключения: журнал Identity Server 4 (недопустимое имя объекта 'DeviceCodes') исключение - PullRequest
1 голос
/ 06 апреля 2020

Мы используем Identity Server 4 для аутентификации. После обновления нашего решения с. Net Core 2.0 до. Net Core 3.1 мы начали замечать, что регистрируется новое исключение, когда клиент перенаправляет на наш URL-адрес аутентификации, что не влияет на процесс, и все кажется нормальным для конца пользователь. Исключение составляет:

An exception occurred while iterating over the results of a query for context type 'IdentityServer4.EntityFramework.DbContexts.PersistedGrantDbContext'.
Microsoft.Data.SqlClient.SqlException (0x80131904): Invalid object name 'DeviceCodes'.
   at Microsoft.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__164_0(Task`1 result)
   at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location where exception was thrown ---
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.AsyncEnumerator.InitializeReaderAsync(DbContext _, Boolean result, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func`4 operation, Func`4 verifySucceeded, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.AsyncEnumerator.MoveNextAsync()
ClientConnectionId:2b07bb46-18fe-4553-a79f-89b0186556d4
Error Number:208,State:1,Class:16

запрос, который вызывает это исключение:

Failed executing DbCommand (2ms) [Parameters=[@__p_0='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']
SELECT [d].[UserCode], [d].[ClientId], [d].[CreationTime], [d].[Data], [d].[DeviceCode], [d].[Expiration], [d].[SubjectId]
FROM [DeviceCodes] AS [d]
WHERE [d].[Expiration] < GETUTCDATE()
ORDER BY [d].[DeviceCode]

У нас нет этой таблицы ' DeviceCodes ' в нашем контексте, Любой совет пожалуйста!

1 Ответ

0 голосов
/ 18 апреля 2020

Вам не хватает таблицы DeviceCodes, которую вы получите (теперь, когда вы обновились), добавив миграцию из окна консоли диспетчера пакетов, например:

add-migration Core3Upgrade -Context PersistedGrantDbContext

(не забудьте установить правильный запуск проект в VS и соответствующий проект по умолчанию в консоли диспетчера пакетов в соответствии с вашими настройками, иначе это не удастся.)

, а затем ...

update-database -Context PersistedGrantDbContext

(или запустить любой код инициализации вы можете использовать для заполнения / применения миграций для вашей базы данных аутентификации)

В случае успеха должно быть выполнено следующее SQL:

  Executed DbCommand (27ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
  CREATE TABLE [DeviceCodes] (
      [UserCode] nvarchar(200) NOT NULL,
      [DeviceCode] nvarchar(200) NOT NULL,
      [SubjectId] nvarchar(200) NULL,
      [ClientId] nvarchar(200) NOT NULL,
      [CreationTime] datetime2 NOT NULL,
      [Expiration] datetime2 NOT NULL,
      [Data] nvarchar(max) NOT NULL,
      CONSTRAINT [PK_DeviceCodes] PRIMARY KEY ([UserCode])
  );
...