Подтвердить что ты не робот

"Контекст не может использоваться во время создания модели" исключение с идентификатором ASP.NET

Почему это происходит, когда мы вызываем метод AccountApiController.Register()?

  • что пытается использовать контекст?
  • что пытается создать контекст?
  • Как нам избежать этого?
  • как мы отлаживаем это?

"Сообщение": "Произошла ошибка.",

"ExceptionMessage": "Контекст не может использоваться, пока модель создается. Это исключение может быть выбрано, если контекст используется внутри метода OnModelCreating или если тот же экземпляр контекста доступ к нескольким потокам одновременно. Обратите внимание, что члены экземпляра DbContext и связанные классы не гарантируются как поток сейф".

"ExceptionType": "System.InvalidOperationException",

"StackTrace": "

в System.Web.Http.ApiController.d__1.MoveNext()

--- Конец трассировки стека из предыдущего места, где было выбрано исключение

в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(задача задачи)

в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Задачa > задача)

в System.Web.Http.Dispatcher.HttpControllerDispatcher.d__0.MoveNext()"

4b9b3361

Ответ 1

Проблема заключалась в том, что мы не использовали шаблон factory, который MS рекомендует.

Вы можете использовать реализацию factory, чтобы получить экземпляр UserManager из контекста OWIN.... Это рекомендуемый способ получения экземпляра UserManager для каждого запроса для приложения.

В результате "один и тот же экземпляр контекста обращается одновременно несколькими потоками", поскольку несколько запросов и, таким образом, потоки разделяют DbContext.

Это верно. Он создает новый экземпляр MyDbContext для каждого вызова функции UserManagerFactory.

UserManagerFactory 
= () => new UserManager<IdentityUser>(new UserStore<IdentityUser>(new MyDbContext()));

Неправильно указано следующее.. Он выглядит похожим, но не создает новый экземпляр для каждого вызова UserManagerFactory. Это то, что мы использовали, ergo наш сайт сломался.

var userStore = new UserStore<IdentityUser>(new MyDbContext());                    
var userManager = new UserManager<IdentityUser>(userStore);
UserManagerFactory = () => userManager;

Ответ 2

Эта ошибка также может возникнуть в случае неправильного connectionString. Проверьте, действительно ли connectionString (нет опечаток и т.д.).

Ответ 3

Вы переопределяете метод OnModelCreating? Если да, можете ли вы поделиться им или всем классом контекста?

Если нет, в сообщении об ошибке

следует обратить внимание на следующее:

или при одновременном доступе к одному экземпляру контекста несколькими потоками. Обратите внимание, что члены экземпляра DbContext и связанные классы не гарантируют безопасность потоков.

Если это не помогает, вы используете неизменный проект веб-API, который создается Visual Studio?

Ответ 4

Если вы получаете записи из таблицы/вида, убедитесь, что у вас есть достаточный доступ к объектам БД.

У меня была та же проблема, и я разрешил ее, выполнив

sp_change_users_login [ @Action = ] 'action' [ , [ @UserNamePattern = ] 'user' ] [ , [ @LoginName = ] 'login' ] [ , [ @Password = ] 'password' ] [;]


sp_change_users_login 'update_one' 'dbuser' 'dblogin'

Найти больше фрагментов и деталей