web-dev-qa-db-fra.com

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

Comment gérer les situations dans lesquelles j'ai besoin de données préexistantes avant le démarrage 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 dans lesquels j'aimerais charger dans la base de données après que le code en premier l'ait généré. Comment puis-je faire cela?

L'application est structurée comme suit:

Repository > Service > WebMVC

Le xml est dans le projet WebMVC.

45
Shawn Mclean

Vous créez un initialiseur personnalisé, qui hérite de l'interface DropCreateDatabaseIfModelChanges ou DropCreateDatabaseAlways. Comme:

public class EntitiesContextInitializer : DropCreateDatabaseIfModelChanges<-YourDbContext->

Et puis 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é cela, vous devez également configurer Initializer, comme l'a mentionné Ladislav Mrnka.

Database.SetInitializer(new EntitiesContextInitializer());

ex .: 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; .....

67
Damb

Vous devez créer un initialiseur de base de données personnalisé dérivé par exemple de DropCreateDatabaseIfModelChanges et remplir les données dans la méthode overriden Seed. Ensuite, vous devez utiliser Database.SetInitializer pour définir votre nouvel initialiseur 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.

11
Ladislav Mrnka

Pour un exemple, voir la nouvelle série de didacticiels MVC/Entity Framework sur http://www.asp.net/entity-framework/tutorials#Using%20MVC Les n ° 1 et n ° 4 affichent les classes d'initialisation.

1
tdykstra