[c#] Wie kann ich die Tabellennamen bei Verwendung von Visual Studio 2013 ASP.NET Identity ändern?



1 Answers

Unten ist meine Arbeitslösung:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder); // This needs to go before the other rules!

        modelBuilder.Entity<ApplicationUser>().ToTable("User");
        modelBuilder.Entity<IdentityRole>().ToTable("Role");
        modelBuilder.Entity<IdentityUserRole>().ToTable("UserRole");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaim");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogin");
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

Sehen Sie this für mehr Details

Question

Ich verwende die Release-Version (RTM, nicht RC) von Visual Studio 2013 (heruntergeladen von MSDN 2013-10-18) und daher die neueste (RTM) Version von AspNet.Identity. Wenn ich ein neues Webprojekt erstelle, wähle ich "Individuelle Benutzerkonten" zur Authentifizierung aus. Dies erstellt die folgenden Tabellen:

  1. AspNetRoles
  2. AspNetUserClaims
  3. AspNetUserLogins
  4. AspNetUserRoles
  5. AspNetUsers

Wenn ich einen neuen Benutzer (unter Verwendung der Standardvorlage) registriere, werden diese Tabellen (oben aufgeführt) erstellt und die AspNetUsers-Tabelle enthält einen Datensatz, der Folgendes enthält:

  1. Ich würde
  2. Nutzername
  3. PasswortHash
  4. Sicherheitsstempel
  5. Diskriminator

Durch das Hinzufügen von öffentlichen Eigenschaften zu der Klasse "ApplicationUser" habe ich außerdem zusätzliche Felder zu der AspNetUsers-Tabelle wie "Vorname", "Nachname", "PhoneNumber" usw. hinzugefügt.

Hier ist meine Frage. Gibt es eine Möglichkeit, die Namen der obigen Tabellen zu ändern (wenn sie zum ersten Mal erstellt werden) oder werden sie immer mit dem AspNet Präfix benannt, wie ich oben aufgeführt habe? Wenn die Tabellennamen anders benannt werden können, erläutern Sie bitte wie.

- AKTUALISIEREN -

Ich habe @ Hao Kungs Lösung implementiert. Es erstellt eine neue Tabelle (zum Beispiel nannte ich es MyUsers), aber es erstellt auch weiterhin die AspNetUsers-Tabelle. Ziel ist es, die Tabelle "AspNetUsers" durch die Tabelle "MyUsers" zu ersetzen. Siehe folgenden Code und Datenbankabbild der erstellten Tabellen.

Ich möchte tatsächlich jede AspNet Tabelle durch meinen eigenen Namen ersetzen ... Zum Beispiel MyRoles, MyUserClaims, MyUserLogins, MyUserRoles und MyUsers.

Wie erreiche ich das und komme mit nur einem Satz von Tabellen aus?

public class ApplicationUser : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string PostalCode { get; set; }
    public string PhonePrimary { get; set; }
    public string PhoneSecondary { get; set; }
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext(): base("DefaultConnection")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<IdentityUser>().ToTable("MyUsers");
    }
}

- UPDATE ANTWORT -

Danke an Hao Kung und Peter Stulinski. Das hat mein Problem gelöst ...

    protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
        modelBuilder.Entity<ApplicationUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
        modelBuilder.Entity<IdentityUserRole>().ToTable("MyUserRoles");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("MyUserLogins");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("MyUserClaims");
        modelBuilder.Entity<IdentityRole>().ToTable("MyRoles");
    }



Wir können ASP.net Identity-Standardtabellennamen wie folgt ändern:

    public class ApplicationDbContext : IdentityDbContext
    {    
        public ApplicationDbContext(): base("DefaultConnection")
        {
        }

        protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<IdentityUser>().ToTable("user");
            modelBuilder.Entity<ApplicationUser>().ToTable("user");

            modelBuilder.Entity<IdentityRole>().ToTable("role");
            modelBuilder.Entity<IdentityUserRole>().ToTable("userrole");
            modelBuilder.Entity<IdentityUserClaim>().ToTable("userclaim");
            modelBuilder.Entity<IdentityUserLogin>().ToTable("userlogin");
        }
    }

Außerdem können wir jede Klasse erweitern und beliebige Eigenschaften zu Klassen wie 'IdentityUser', 'IdentityRole', ... hinzufügen.

    public class ApplicationRole : IdentityRole<string, ApplicationUserRole>
{
    public ApplicationRole() 
    {
        this.Id = Guid.NewGuid().ToString();
    }

    public ApplicationRole(string name)
        : this()
    {
        this.Name = name;
    }

    // Add any custom Role properties/code here
}


// Must be expressed in terms of our custom types:
public class ApplicationDbContext 
    : IdentityDbContext<ApplicationUser, ApplicationRole, 
    string, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }

    static ApplicationDbContext()
    {
        Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }

    // Add additional items here as needed
}

Um Zeit zu sparen, können wir die erweiterbare AspNet Identity 2.0-Projektvorlage verwenden , um alle Klassen zu erweitern.




Related