A pochi passi da seguire:
- Installare NuGet pacchetto:
Microsoft.AspNet.Identity.EntityFramework
- Aggiungi un
connection string
al tuo web.config/app.config
Ora è necessario definire la vostra abitudine Database Context
:
public class MyContext : IdentityDbContext
{
public MyContext()
: base(<connection string name>)
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>()
.ToTable("Users");
modelBuilder.Entity<IdentityRole>()
.ToTable("Roles");
modelBuilder.Entity<IdentityUserRole>()
.ToTable("UserRoles");
modelBuilder.Entity<IdentityUserClaim>()
.ToTable("UserClaims");
modelBuilder.Entity<IdentityUserLogin>()
.ToTable("UserLogins");
}
}
Come potete vedere I Ho usato DbModelBuilder
per mappare tutte le entità in una nuova tabella.
- Aprire NuGet Package Manager Console
- Esegui comando
Enable-Migrations
Si creerà una cartella Migrations
con il file di configurazione Configuration.cs
.
Dovrebbe essere qualcosa di simile:
internal sealed class Configuration : DbMigrationsConfiguration<ConsoleApplication1.Models.MyContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
protected override void Seed(ConsoleApplication1.Models.MyContext context)
{
}
}
Nel costruttore modificare la proprietà AutomaticMigrationsEnabled
a true
.
- Aprire NuGet Package Manager Console
- Esegui comando
Update-Database
Dovrebbe eseguire lo script per creare le nuove tabelle.
È possibile personalizzare le entità (e gli ID) creando una classe personalizzata per ogni interfaccia definita.
public class MyUser : IdentityUser<string, MyUserLogin, MyUserRole, MyUserClaim>
{
}
Dal momento che si sta utilizzando Owin è possibile definire le UserStore:
public class MyUserStore: UserStore<MyUser, MyRole, string, MyUserLogin, MyUserRole, MyUserClaim>
{
public MyUserStore(MyContext context)
: base(context)
{
}
}
e l'implementazione UserManager:
public class ApplicationUserManager : UserManager<ASPNETIdentity2.Models.MyUser, string>
{
public ApplicationUserManager(IUserStore<ASPNETIdentity2.Models.MyUser, string> store)
: base(store)
{
}
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var manager = new ApplicationUserManager(new MyUserStore(context.Get<MyContext>()));
manager.UserValidator = new UserValidator<MyUser, string>(manager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = true
};
manager.PasswordValidator = new PasswordValidator()
{
RequiredLength = 5,
RequireNonLetterOrDigit = false, // true
// RequireDigit = true,
RequireLowercase = false,
RequireUppercase = false,
};
return (manager);
}
}
E il tuo Owin.Startup
dovrebbe essere simile a questo:
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.CreatePerOwinContext(MyContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
}
}
Se si desidera dare un'occhiata a un'implementazione personalizzata è possibile controllare il mio GitHub repository con una soluzione di lavoro semplice su ASP.NET MVC.
UPDATE:
C'è un altro progetto in questa soluzione con una configurazione minima; in pratica devi solo definire il tuo contesto (IdentityDbContext) se vuoi solo rinominare le tue tabelle.
Il progetto può essere trovato here.
Se sei soddisfatto della mia risposta, potresti accettarlo? Saluti. – LeftyX
@see più nitido qualsiasi suggerimento per la mia domanda http://stackoverflow.com/questions/36929767/asp-net-identity-entity-framework-database-first-approach-with-own-table-definti – SivaRajini