Oracle
 sql >> Database >  >> RDS >> Oracle

ASP.NET MVC5 - Mantenere gli utenti nel database Oracle

Questo potrebbe arrivare un po 'in ritardo per te, ma lo lascerò nel caso in cui qualcun altro si imbattesse nello stesso problema. Quindi alla fine sono riuscito a far funzionare Identity 2.0 e Oracle insieme. I seguenti passaggi funzionano se non si desidera apportare modifiche all'IdentityUser predefinito (ad es. se si è d'accordo con un ID char invece di int o long) e si vogliono solo le tabelle sullo schema Oracle esistente.

  1. Crea tabelle di identità su Oracle. Puoi modificare i nomi delle tabelle se lo desideri, assicurati solo di includere le colonne necessarie affinché Identity funzioni con esso. Puoi anche aggiungere eventuali colonne extra di cui potresti aver bisogno sulla tua applicazione (script originariamente trovato su Devart , l'ho copiato in un Gist nel caso in cui l'URL si interrompa):

    Gist qui

  2. Se stai usando un file EDMX, devi aggiungere una nuova stringa di connessione perché quella che viene generata automaticamente non funzionerà, hai bisogno di una stringa di connessione standard. Prova a seguire questo modello:

    <add name="IdentityContext" connectionString="Data Source=localhost:1521/xe;PASSWORD=password;USER ID=username;" providerName="Oracle.ManagedDataAccess.Client" />

  3. Di' al tuo ApplicationDbContext di usare la tua nuova connectionString

    public ApplicationDbContext()
        : base("IdentityContext", throwIfV1Schema: false)
    {
    }
    
  4. Indica a Identity di utilizzare lo schema e le tabelle esistenti. Aggiungi questo metodo all'interno della definizione ApplicationDbContext trovata in IdentityModels.cs:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder); // MUST go first.
    
        modelBuilder.HasDefaultSchema("YOUR_SCHEMA"); // Use uppercase!
    
        modelBuilder.Entity<ApplicationUser>().ToTable("AspNetUsers");
        modelBuilder.Entity<IdentityRole>().ToTable("AspNetRoles");
        modelBuilder.Entity<IdentityUserRole>().ToTable("AspNetUserRoles");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("AspNetUserClaims");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("AspNetUserLogins");
    }
    
  5. Ricostruisci e il gioco è fatto!

Fammi sapere se funziona per te!