45 votes

Entity Framework Code-first données par défaut dans la base de données

Comment puis-je gérer les situations dans lesquelles j'ai besoin de données préexistantes avant le lancement de l'application ou juste après la génération de la base de données. Par exemple, j'ai une liste de pays que je voudrais charger dans la base de données après que le code-first l'ait générée. Comment dois-je m'y prendre ?

L'application est structurée comme suit :

Repository > Service > WebMVC

Le xml est dans le WebMVC projet.

67voto

Damb Points 6587

Vous créez un initialisateur personnalisé, qui hérite de DropCreateDatabaseIfModelChanges o DropCreateDatabaseAlways interface. Comme :

public class EntitiesContextInitializer : DropCreateDatabaseIfModelChanges<-YourDbContext->

Et ensuite vous écrasez la méthode Seed comme :

protected override void Seed(YourDbContext context)

Un exemple complet pourrait ressembler à ceci :

public class EntitiesContextInitializer : DropCreateDatabaseIfModelChanges<EntitiesContext>
{
    protected override void Seed(EntitiesContext context)
    {
        List<Role> roles = new List<Role>
        {
            new Role {Id=1, Title="Admin"},
            new Role {Id=2, Title="ProjectManager"},
            new Role {Id=3, Title="Developer"}
        };

        // add data into context and save to db
        foreach (Role r in roles)
        {
            context.Roles.Add(r);
        }
        context.SaveChanges();

    }
}

Edit : Après avoir configuré ceci, vous devez aussi configurer Initializer, comme Ladislav Mrnka l'a mentionné.

Database.SetInitializer(new EntitiesContextInitializer());

ie. : dans Global.asax :

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
            Database.SetInitializer(new EntitiesContextInitializer());
        }

N'oubliez pas d'ajouter using System.Data.Entity; .....

11voto

Ladislav Mrnka Points 218632

Vous devez créer un initialisateur de base de données personnalisé dérivé par exemple de DropCreateDatabaseIfModelChanges et remplit les données dans la surcharge Seed méthode. Vous devez alors utiliser Database.SetInitializer pour définir votre nouvel initialisateur au démarrage de l'application. Ici est un exemple (de CTP5) utilisé pour créer un index personnalisé dans la base de données.

1voto

tdykstra Points 2585

Pour un exemple, voir la nouvelle série de tutoriels MVC / Entity Framework à l'adresse suivante http://www.asp.net/entity-framework/tutorials#Using%20MVC Les numéros 1 et 4 montrent des classes d'initialisation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X