Comment ajouter une migration à un projet EntityFramework 7

asp.net-core code-first-migrations entity-framework entity-framework-core

Question

Je démarre un nouveau projet avec asp.net 5 et EF 7 VS2015.

J'ai sélectionné le modèle de projet avec la gestion de l'utilisateur. Maintenant, je veux ajouter des classes à dbContext et créer un nouveau schéma avec mes nouvelles classes.

Voici mon applicationDbContext qui ressemble à ceci:

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public DbSet<Candidate> Candidates { get; set; }
    public DbSet<Manager> Managers { get; set; }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        // Customize the ASP.NET Identity model and override the defaults if needed.
        // For example, you can rename the ASP.NET Identity table names and more.
        // Add your customizations after calling base.OnModelCreating(builder);
        builder.Entity<Candidate>().Key(x => x.Id);
        builder.Entity<Manager>().Key(x => x.Id);
    }
}

Je n'ai pas été en mesure de recréer ou de migrer ma base de données vers une version avec ma table Candidates et Managers .

Quelles commandes dois-je entrer pour faire apparaître ma base de données? Mon ami Google et Bing m'ont pointé dans toutes les directions, mais rien de ce que j'ai trouvé n'a fonctionné.

Réponse acceptée

Vous devez utiliser les nouvelles commandes dnx , par exemple:

dnx . ef migration add NameOfMigration

Et pour lancer la migration:

dnx . ef migration apply

Réponse populaire

Selon ASP.NET 5 et Entity 7 RC1, les étapes sont les suivantes:

  1. Ajoutez une dépendance au package de nuget Entity Commands dans votre projet principal. Donc, dans votre project.json vous devriez voir cette dépendance "EntityFramework.Commands": "7.0.0-rc1-final"
  2. Ajoutez une commande d'alias à utiliser ultérieurement à partir de la console. Ainsi, dans votre project.json vous aurez la commande ef suivante: "commands": { "ef": "EntityFramework.Commands", "web": "Microsoft.AspNet.Server.Kestrel" }
  3. Ouvrez une console et exécutez les commandes de migration. Par exemple:

    D:\Projects\MyProject\src\MyProject.Web.Api>dnx ef migrations add Initial --targetProject MyProject.Data.SqlServer

  4. Ensuite, passez en revue la migration que ef créera dans votre projet et appliquez les modifications à votre base de données (la base de données configurée pour votre projet) à l'aide de la commande suivante:

    D:\Projects\MyProject\src\MyProject.Web.Api>dnx ef database update

Notez que l'attribut --targetProject vous permet de spécifier le projet où se trouve votre DbContext et où le dossier Migrations sera créé. Si votre DbContext est dans votre projet principal, vous pouvez l'omettre (mais je recommande d'avoir un projet de bibliothèque de classes pour tout ce qui concerne la persistance afin que cette commande soit pratique)

Dans votre Startup.cs vous avez généralement la configuration pour Entity, y compris la chaîne de connexion. Ceci est un exemple de base:

public Startup(IHostingEnvironment env)
    {
        // Set up configuration sources.
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
        builder.AddEnvironmentVariables();
        Configuration = builder.Build();
    }

    public IConfigurationRoot Configuration { get; private set; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<KuneDbContext>(options => {
                options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]);
            });

        // Add identity here http://docs.asp.net/en/latest/tutorials/your-first-aspnet-application.html

        services.AddMvc();

        // Add application services
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        if (env.IsDevelopment())
        {
            app.UseBrowserLink();
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");

            // For more details on creating database during deployment see http://go.microsoft.com/fwlink/?LinkID=615859
            try
            {
                using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>()
                    .CreateScope())
                {
                    serviceScope.ServiceProvider.GetService<KuneDbContext>()
                         .Database.Migrate();
                }
            }
            catch { }
        }

        app.UseIISPlatformHandler();

        app.UseStaticFiles();
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

        //Seed Data if you want to load some test data in the DB
        //SeedData.Initialize(app.ApplicationServices);
    }

    // Entry point for the application.
    public static void Main(string[] args) => WebApplication.Run<Startup>(args);
}


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi