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

Ошибка ASP.NET/Identity: тип объекта ApplicationUser не является частью модели для текущего контекста

В Переместите хранилище удостоверений ASP.NET в базу данных EF Sql. zoidbergi описал проблему, подобную той, которая испытывает меня, но на которую не ответил полностью. Я получаю ошибку выше при попытке перехода из встроенной базы данных .mdf в MySQL. Я использую методологию Database-First и успешно создал модель Entity из базы данных Mysql.

Независимо от того, воссоздаю ли идентификаторы данных asp.net, приложение захлопывает, как только пользовательский доступ обращается:

The entity type ApplicationUser is not part of the model for the current context.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: The entity type ApplicationUser is not part of the model for the current context.

Source Error:  

Line 65:             ' Create a local login before signing in the user
Line 66:             Dim user = New ApplicationUser() With {.UserName = model.UserName}
**Line 67:             Dim result = Await UserManager.CreateAsync(User, model.Password)**
Line 68:             If result.Succeeded Then
Line 69:                 Await SignInAsync(User, isPersistent:=False)

Я указал ApplicationDBContext на мою модель DbContext:

Public Class ApplicationDbContext
    Inherits IdentityDbContext(Of ApplicationUser)
    Public Sub New()
        MyBase.New("IMSEntities")
    End Sub
End Class

Googling стремится найти людей, которые отказались от своих поставщиков безопасности и закодировали их - я бы хотел использовать стандартный, если это возможно. Расстроенный!

4b9b3361

Ответ 1

(INELEGANT?) РЕШЕНИЕ:

Я смотрел это превосходное видео https://www.youtube.com/watch?v=elfqejow5hM от Александра Шмидта, и в 33:00 автор обнаружил, что строка соединения не должна быть строкой соединения EF (с использованием EF), но должна быть связью для подключения к MySQL MYSQL/SQLServer, специально настроенной для обеспечения безопасности, то есть:

<add name="IMSSecurityEntities" connectionString="data source=localhost;database=mydb;Uid=id;Pwd=password;" providerName="mysql.data.mysqlclient"/>

и аналогичная модель должна быть скорректирована так:

Public Class ApplicationDbContext
    Inherits IdentityDbContext(Of ApplicationUser)
    Public Sub New()
        MyBase.New("IMSSecurityEntities")
    End Sub

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

Ответ 2

В моем случае это было свойство providerName строки подключения. Я использовал копию базы данных First Generated, которая использует System.Data.EntityClient, в то время как обычные строки подключения (для SQL Server) используют System.Data.SqlClient. Поэтому я изменил этот

<add name="DefaultConnection" connectionString="..." System.Data.EntityClient"/>

к этому

<add name="DefaultConnection" connectionString="..." System.Data.SqlClient"/>