24 messaggi dal 06 novembre 2014
Ciao a tutti, cercando di estrarre una lista di utenti in asp.net MVC 5 usando Identity 2.0, ma ricevo un'eccezione first chance di tipo System.InvalidOperationException.

Di seguito il procedimento che seguo:
1. Dopo aver creato la soluzione con Account utente Individuale, lancio l'applicazione e creo un nuovo utente.
2. creo un nuovo controller vuoto e nell'action Index inserisco
            Dim ctx As New ApplicationDbContext
            Dim list As IEnumerable(Of ApplicationUser) = ctx.Users.ToList
            Return View(list)

3. Creo una view vuota, lancio l'applicazione e tutto funziona
4. Creo una view con Schema: List, Classe modello: ApplicationUser, Classe contesto: ApplicationDbContext, se lancio l'applicazione mi da l'eccezione first chance non solo sulla view, ma anche in fase di Login in Account/Login in corrispondenza dell'istanza
        Dim result = Await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout := False)


L'eccezione riporta:
Più set di oggetti per tipo non sono supportati. I set di oggetti 'ApplicationUsers' e 'Users' possono entrambi contenere istanze di tipo 'WebApplication4.ApplicationUser'.

C'è qualcuno che mi può aiutare a capire cosa non va?

Grazie

Paolo
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Paolo,
a giudicare dall'errore, sembrerebbe semplicemente che nel tuo ApplicationDbContext ci siano 2 set per lo stesso tipo di entità (ApplicationUser).

Tieni presente che un set per ApplicationUser è già definito nell'IdentityDbContext da cui il tuo ApplicationDbContext deriva.
Probabilmente ne hai definito un altro così:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
  public DbSet<ApplicationUser> ApplicationUsers { get; set; }
}

Penso che tu possa eliminarlo, puoi tranquillamente usare il set Users definito dall'IdentityDbContext da cui derivi.

ciao,
Moreno

Enjoy learning and just keep making
24 messaggi dal 06 novembre 2014
Ciao Moreno, il problema è proprio che io non ho definito alcun ApplicationDbContext in nessun'altra posto.
Sembra che non possa passare una lista degli utenti definita come
      Dim ctx As New ApplicationDbContext
      Dim list As IEnumerable(Of ApplicationUser) = ctx.Users.ToList
     Return View(list)

ad una view che usa come modello IEnumerable(Of WebApplication5.ApplicationUser).
E comunque, anche se elimino view e controller incriminati l'eccezione si ripresenta in fase di login.

Esiste forse un altro modo per ottenere la lista degli ApplicationUser in Identity?

Grazie

Paolo
Modificato da papell il 09 febbraio 2016 14.08 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Paolo,
provo a spiegarmi meglio. Vedo qui che crei un'istanza di ApplicationDbContext
Dim ctx As New ApplicationDbContext

Clicca col mouse sulla parola ApplicationDbContext e poi premi F12. Visual Studio ti aprirà il file di codice in cui è stata definita la classe ApplicationDbContext. Posta qui il suo contenuto.

Enjoy learning and just keep making
24 messaggi dal 06 novembre 2014
Mi rimanda al file IdentityModels che contiene

Imports System.Security.Claims
Imports System.Threading.Tasks
Imports Microsoft.AspNet.Identity
Imports Microsoft.AspNet.Identity.EntityFramework
Imports Microsoft.AspNet.Identity.Owin

' È possibile aggiungere dati di profilo dell'utente specificando altre proprietà della classe ApplicationUser. Per ulteriori informazioni, visitare http://go.microsoft.com/fwlink/?LinkID=317594.
Public Class ApplicationUser
    Inherits IdentityUser
    Public Async Function GenerateUserIdentityAsync(manager As UserManager(Of ApplicationUser)) As Task(Of ClaimsIdentity)
        ' Tenere presente che il valore di authenticationType deve corrispondere a quello definito in CookieAuthenticationOptions.AuthenticationType
        Dim userIdentity = Await manager.CreateIdentityAsync(Me, DefaultAuthenticationTypes.ApplicationCookie)
        ' Aggiungere qui i reclami utente personalizzati
        Return userIdentity
    End Function
End Class

Public Class ApplicationDbContext
    Inherits IdentityDbContext(Of ApplicationUser)
    Public Sub New()
        MyBase.New("DefaultConnection", throwIfV1Schema:=False)
    End Sub

    Public Shared Function Create() As ApplicationDbContext
        Return New ApplicationDbContext()
    End Function
    Public Property ApplicationUsers As System.Data.Entity.DbSet(Of ApplicationUser)
End Class


Paolo
11.886 messaggi dal 09 febbraio 2002
Contributi
Ok, ecco trovata la riga da rimuovere:
Public Property ApplicationUsers As System.Data.Entity.DbSet(Of ApplicationUser)


Ora lancia in debug l'applicazione, il problema dovrebbe essere sparito. Se hai errori di compilazione, è possibile che in qualche punto della tua applicazione tu stia usando la proprietà ApplicationUsers che hai appena eliminato. Per risolvere il problema, usa invece la proprietà Users.

ciao,
Moreno

Enjoy learning and just keep making
24 messaggi dal 06 novembre 2014
Ciao Moreno, ti ringrazio, come sempre sei una preziosa risorsa.

Grazie ancora,

Paolo

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.