Non-destructive version basée sur IMLiviu de réponse et commentaires:
Viens de tomber sur ce un problème dû unknot la façon correcte de le faire à partir de la réponse + commentaires (+ essai et erreur), donc pensé que je voudrais partager les résultats que vous pouvez couper et coller. Ceci est basé sur la réponse par IMLiviu, si pleine de crédit pour eux. Il modifie le UserProfile
et UserContext
les classes telles qu'elles apparaissent directement compatible avec les objectifs EF comme-est:
J'ai été horrifié de voir une suggestion qui a impliqué la suppression complète d'une base de données, juste pour ajouter un peu de tables donc, après avoir lu tous les commentaires et la création d'un prototype, voici le résultat.
1 - Arrêter de Webmatrix création
Arrêt de la norme webmatrix création de l'adhésion des tables (commentaire de la [InitializeSimpleMembership] attribut).
[Authorize]
//[InitializeSimpleMembership]
public class AccountController : Controller
2 - Créer une configuration de la migration
Créer une configuration de la migration de la classe comme celle ci-dessous:
public class MigrationConfiguration : DbMigrationsConfiguration<UsersContext>
{
public MigrationConfiguration()
{
this.AutomaticMigrationsEnabled = true; // This is important as it will fail in some environments (like Azure) by default
}
protected override void Seed(UsersContext context)
{
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
}
}
3 - Retirer la pluralisation de EF création
Modifier la AccountModel.cs fichier UsersContext
classe de supprimer la pluralisation de l'option (ajouté le OnModelCreating de l'événement):
public class UsersContext : DbContext
{
public UsersContext() : base("DefaultConnection")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
4 - Ajouter de nouveaux champs à UserProfile
Ajouter des champs supplémentaires, vous devez UserProfile:
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public string UserEmail { get; set; } // <<<<<<<< E.G. THIS ADDED
}
5 - Migrer les tables sur app start
Maintenant au démarrage de l'application, vous définissez la base de données d'initialisation de la stratégie et de déclencher à l'aide d'une lecture:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
Database.SetInitializer(new MigrateDatabaseToLatestVersion<UsersContext, MigrationConfiguration>());
new UsersContext().UserProfiles.Find(1);
}
Évidemment, vous aurez besoin d'ajouter différentes à l'aide des instructions pour obtenir tout cela fonctionne, mais le clic droit de résoudre option de le faire pour vous.
Notes supplémentaires:
Si vous décidez (comme je l'ai fait) pour utiliser une autre table que UserProfile
pour vos utilisateurs, vous avez besoin de changer plusieurs entrées pour le match.
- Dans votre
SimpleMembershipInitializer
classe que vous besoin de faire référence à la nouvelle table et les noms de colonne
- Dans le compte du contrôleur et les différents Login et Enregistrer des vues, vous devez référencer votre nouveau modèle de champs (si les noms ont changé)
- Dans l'
UsersContext
classe, vous pouvez laisser le Userprofile classname comme-est, mais vous avez besoin de changer l' Table
d'attribut pour correspondre à votre nom de table.
- Dans l'
UserProfile
classe, vous devez renommer les champs pour correspondre à votre nouvelle table des noms de champ.
- Dans la base de données, vous devez retirer la relation entre
webpages_UsersInRoles
et UserProfile
et ajouter une relation entre votre nouvelle table utilisateur et d' webpages_UsersInRoles
ou la vieille de l'intégrité référentielle, vérifications de vous briser au moment de l'exécution.
(Je vous recommande fortement de supprimer l'existant UserProfile
tableau et vérifier qu'il n'est pas recréé. si c'est que vous avez quelque chose à gauche derrière dans votre code).