Cómo agregar una migración a un proyecto EntityFramework 7

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

Pregunta

Estoy empezando un nuevo proyecto usando asp.net 5 y EF 7 VS2015.

Seleccioné la plantilla de proyecto con el manejo de usuarios. Ahora quiero agregar algunas clases al dbContext y tener un nuevo esquema creado con mis nuevas clases.

Este es el aspecto de mi ApplicationDbContext:

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

No he podido recrear o migrar mi base de datos a una versión con mi tabla de Candidates y Managers .

¿Qué comandos debo ingresar para que aparezca mi DB? Mi amigo Google y Bing me han señalado en todas direcciones, pero ninguna de las cosas que encontré funcionó.

Respuesta aceptada

Necesitas usar los nuevos comandos dnx , por ejemplo:

dnx . ef migration add NameOfMigration

Y para ejecutar la migración:

dnx . ef migration add NameOfMigration

Respuesta popular

Según ASP.NET 5 y Entity 7 RC1, los pasos serían:

  1. Agregue una dependencia al paquete de nuget de comandos de entidad en su proyecto principal. Así que en su project.json debería ver esta dependencia "EntityFramework.Commands": "7.0.0-rc1-final"
  2. Agregue un comando de alias para usar desde la consola más adelante. Así que en su project.json tendría el siguiente comando ef : "commands": { "ef": "EntityFramework.Commands", "web": "Microsoft.AspNet.Server.Kestrel" }
  3. Abre una consola y ejecuta los comandos de migración. Por ejemplo:

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

  4. Luego revise la migración que ef creará en su proyecto y aplique los cambios a su base de datos (la base de datos que está configurada para su proyecto) con el siguiente comando:

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

Observe que el atributo --targetProject permite especificar el proyecto donde se encuentra su DbContext y donde se crearía la carpeta Migraciones. Si su DbContext está en su proyecto principal, puede omitirlo (pero recomiendo tener un proyecto de biblioteca de clases para todo lo relacionado con la persistencia, por lo que este comando sería útil)

En su Startup.cs es donde normalmente tendría la configuración para Entidad, incluida la cadena de conexión. Este es un ejemplo básico:

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



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué