web-dev-qa-db-fra.com

Comment initialiser une base de données avec Entity Framework et des tables d'appartenance

J'ai une application Web MVC4 qui utilise d'abord le code Entity Framework 5.0.

Dans Global.asax.cs, j'ai un programme d'amorçage qui initialise l'Entity.Database, force la base de données à être initialisée et initialise la base de données pour l'adhésion. Le code est celui-ci:

System.Data.Entity.Database.SetInitializer(new DatabaseContextInitializer());
Database.Initialize(true);
WebSecurity.InitializeDatabaseConnection(DEFAULTCONNECTION, "UserProfile", "UserId", "UserName", autoCreateTables: true);

Le DatabaseContextInitializer est très simple pour le moment:

public class DatabaseContextInitializer : DropCreateDatabaseIfModelChanges<DatabaseContext>
{
    protected override void Seed(DatabaseContext dbContext)
    {
        base.Seed(dbContext);
        db.Set<Workout>().Add(new Workout {Id = 1, Name = "My First workout user1"})

    }
}

Le problème est que je ne peux pas créer d'utilisateur pour l'adhésion avec:

WebSecurity.InitializeDatabaseConnection(DEFAULTCONNECTION, "UserProfile", "UserId", "UserName", autoCreateTables: true);

Parce que j'ai un problème avec le fait que la base de données n'est pas créée. Comment initialisez-vous un utilisateur par défaut pour votre base de données avec Entity Framework 5.0 et Asp.Net MVC 4?

22
Patrick Desjardins

Jetez un œil à article suivant pour l'approche recommandée pour l'amorçage de votre base de données à l'aide de migrations.

Voici les étapes:

  1. Créer une nouvelle application ASP.NET MVC 4 à l'aide du modèle Internet
  2. Dans votre console de gestionnaire de packages, tapez la commande suivante:

    enable-migrations
    
  3. Cela va créer un ~/Migrations/Configuration.cs fichier dans lequel vous pouvez amorcer votre base de données:

    using System.Data.Entity.Migrations;
    using System.Linq;
    using System.Web.Security;
    using WebMatrix.WebData;
    
    internal sealed class Configuration : DbMigrationsConfiguration<MvcApplication1.Models.UsersContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = true;
        }
    
        protected override void Seed(MvcApplication1.Models.UsersContext context)
        {
            WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
    
            if (!Roles.RoleExists("Administrator"))
            {
                Roles.CreateRole("Administrator");
            }
    
            if (!WebSecurity.UserExists("john"))
            {
                WebSecurity.CreateUserAndAccount("john", "secret");
            }
    
            if (!Roles.GetRolesForUser("john").Contains("Administrator"))
            {
                Roles.AddUsersToRoles(new[] { "john" }, new[] { "Administrator" });
            }
        }
    }
    
  4. Spécifiez le membre et les fournisseurs de rôles dans votre web.config:

    <roleManager enabled="true" defaultProvider="SimpleRoleProvider">
      <providers>
        <clear/>
        <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
      </providers>
    </roleManager>
    <membership defaultProvider="SimpleMembershipProvider">
      <providers>
        <clear/>
        <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
      </providers>
    </membership>
    
  5. Exécutez la migration dans votre console de gestionnaire de packages:

    update-database -verbose
    
35
Darin Dimitrov