Come aggiungere una migrazione a un progetto EntityFramework 7

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

Domanda

Sto iniziando un nuovo progetto usando asp.net 5 e EF 7 VS2015.

Ho selezionato il modello di progetto con la gestione degli utenti. Ora voglio aggiungere alcune classi al dbContext e avere un nuovo schema creato con le mie nuove classi.

Questo è wat il mio ApplicationDbContext assomiglia a:

    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);
    }
}

Non sono stato in grado di ricreare o migrare il mio database in una versione con la mia tabella Candidates e Managers .

Quali comandi devo inserire dove far apparire il mio DB? Il mio amico Google e Bing mi hanno indicato in tutte le direzioni, ma nessuna delle cose che ho trovato funzionato.

Risposta accettata

È necessario utilizzare i nuovi comandi dnx , ad esempio:

dnx . ef migration add NameOfMigration

E per eseguire la migrazione:

dnx . ef migration apply

Risposta popolare

Come per ASP.NET 5 e Entity 7 RC1 i passaggi sarebbero:

  1. Aggiungi una dipendenza al pacchetto nuget Comandi entità nel tuo progetto principale. Quindi nel tuo project.json dovresti vedere questa dipendenza "EntityFramework.Commands": "7.0.0-rc1-final"
  2. Aggiungi un comando alias da utilizzare dalla console in un secondo momento. Quindi nel tuo project.json avresti il ​​seguente comando ef : "commands": { "ef": "EntityFramework.Commands", "web": "Microsoft.AspNet.Server.Kestrel" }
  3. Aprire una console ed eseguire i comandi di migrazione. Per esempio:

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

  4. Quindi rivedere la migrazione che ef creerà nel progetto e applicare le modifiche al database (il database configurato per il progetto) con il seguente comando:

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

Si noti che l'attributo --targetProject consente di specificare il progetto in cui si trova DbContext e dove verrà creata la cartella Migrazioni. Se il tuo DbContext è nel tuo progetto principale puoi ometterlo (ma ti consiglio di avere un progetto di libreria di classi per tutto ciò che riguarda la persistenza, quindi questo comando sarebbe utile)

Nel tuo Startup.cs è dove di solito avresti la configurazione per Entity inclusa la stringa di connessione. Questo è un esempio di 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);
}


Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché