2016-03-25 13 views
1

In meinem Projekt verwende ich Identität. Identity erstellt standardmäßig Tabellen mit ihren Namen in der Datenbank. Ich möchte diese Namen in meine Namen ändern.Ändern Tabellenname Identität mit Fluent Api

ich fliessend Api bin mit Tabellen zur Konfiguration, die Identität, zum Beispiel erstellt:

public class UserConfiguration : EntityTypeConfiguration<User> 
{ 
    public string TableName 
    { 
     get { return "Users"; } 
    } 
    public UserConfiguration() 
    { 
     this.ToTable(TableName); 
     HasKey(u => u.ProviderId); 
    } 
} 


public class UserClaimsConfiguration : EntityTypeConfiguration<IdentityUserClaim> 
{ 
    public string TableName 
    { 
     get { return "UserClaims"; } 
    } 
    public UserClaimsConfiguration() 
    { 
     this.ToTable(TableName); 
     HasKey(u => u.Id); 
    } 
} 

In Zusammenhang, fügte ich Konfiguration über das DB:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 
    modelBuilder.Configurations.Add(new UserConfiguration()); 
    modelBuilder.Configurations.Add(new RolesConfiguration()); 
    modelBuilder.Configurations.Add(new UserClaimsConfiguration()); 
    modelBuilder.Configurations.Add(new UserLoginsConfiguration()); 
    modelBuilder.Configurations.Add(new UserRoleConfiguration());    
} 

Danach habe ich eine Migration und Update-Datenbank -TargetMigration: RenameTablesInDB.

Aber ich fangen einen Fehler:

Cannot find the object "dbo.AspNetUserClaims" because it does not exist or you do not have permissions.

Antwort

1

Ich löste mein Problem. Wenn Sie den Namen der Identität neu definieren, verwenden Sie fließende API. Sie müssen einige verbindliche Einstellungen vornehmen.

Es ist Zeile in IdentityRole

this.HasKey<string>(r => r.Id); // It's row decision 

Zeile auch in IdentityLoginsConfiguration

HasKey<string>(l => l.UserId); 

Und IdentityUserRole

HasKey(r => new { r.RoleId, r.UserId }); 

Alle jetzt zusammen. Ich werde die ganze Aktion beschreiben. Folgen Sie uns ..

Die erste, wir haben Dateien mit Konfigurationen unserer DB. Wir verwenden EntityTypeConfiguration in unserer Konfiguration.

EntityTypeConfiguration ist eine wichtige Klasse in Fluent API. EntityTypeConfiguration bietet Ihnen wichtige Methoden zum Konfigurieren von Entitäten und deren Eigenschaften zum Überschreiben verschiedener Code-First-Konventionen.

Unsere Klassen mit Konfiguration:

public class RolesConfiguration : EntityTypeConfiguration<IdentityRole> 
{ 
    public string TableName 
    { 
     get { return "Roles"; } 
    } 
    public RolesConfiguration() 
    { 
     this.ToTable(TableName); 
     this.HasKey<string>(r => r.Id); // It's row decision 
    } 
} 

public class UserClaimsConfiguration : EntityTypeConfiguration<IdentityUserClaim> 
{ 
    public string TableName 
    { 
     get { return "UserClaims"; } 
    } 
    public UserClaimsConfiguration() 
    { 
     this.ToTable(TableName); 
    } 
} 

public class UserConfiguration : EntityTypeConfiguration<User> 
{ 
    public string TableName 
    { 
     get { return "Users"; } 
    } 
    public UserConfiguration() 
    { 
     this.ToTable(TableName); 
    } 
} 
public class UserLoginsConfiguration : EntityTypeConfiguration<IdentityUserLogin> 
{ 
    public string TableName 
    { 
     get { return "UserLogins"; } 
    } 

    public UserLoginsConfiguration() 
    { 
     this.ToTable(TableName); 
     HasKey<string>(l => l.UserId); // It's row was my decision 
    } 
} 


public class UserRoleConfiguration : EntityTypeConfiguration<IdentityUserRole> 
{ 
    public string TableName 
    { 
     get { return "UserRoles"; } 
    } 

    public UserRoleConfiguration() 
    { 
     this.ToTable(TableName); 
     HasKey(r => new { r.RoleId, r.UserId }); // It's row was my decision 
    } 
} 

Auch müssen wir Konfiguration DB hinzufügen:

 modelBuilder.Configurations.Add(new UserConfiguration()); 
     modelBuilder.Configurations.Add(new RolesConfiguration()); 
     modelBuilder.Configurations.Add(new UserClaimsConfiguration()); 
     modelBuilder.Configurations.Add(new UserLoginsConfiguration()); 
     modelBuilder.Configurations.Add(new UserRoleConfiguration()); 
     #endregion 

     base.OnModelCreating(modelBuilder); 

BEVOR ICH

haben

Nach hinzugefügt i Konfiguration meiner DB

0

Bringen Sie die Linie base.OnModelCreating (Modelbuilder); unter

 protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 


    modelBuilder.Configurations.Add(new UserConfiguration()); 
    modelBuilder.Configurations.Add(new RolesConfiguration()); 
    modelBuilder.Configurations.Add(new UserClaimsConfiguration()); 
    modelBuilder.Configurations.Add(new UserLoginsConfiguration()); 
    modelBuilder.Configurations.Add(new UserRoleConfiguration()); 

     base.OnModelCreating(modelBuilder); 

} 
+0

Brian Driscoll, anders schreiben in Buch über EntityFramework. Sie können hier https://books.google.com.ua/books sehen?ID = KX_tAQAAQBAJ & pg = PA200 & lpg = PA200 & dq = base.OnModelCreating & source = bl & ot = oni-c87Zhd & sig = ihx5eUWhERuinOH01lz93eWaqbk & hl = ru & sa = X & ved = 0ahUKEwiQ27KA8NzLahXp_HIKHVxaD344ChDoAQgnMAI # v = Seite & q = base.OnModelCreating & f = false – Andrew

Verwandte Themen