¿Cómo utilizar EF7 y conectarse a SQL Server sin startup.cs en la aplicación de consola ASP.NET 5 Beta 8?

asp.net-core asp.net-core-mvc c# entity-framework-core

Pregunta

Problema

Estoy escribiendo una aplicación de muestra de la consola asp.net 5 y quiero usar Entity Framework 7 para hablar con mi backend. Sé cómo hacerlo en una aplicación web, pero no entiendo cómo hacerlo para una aplicación de consola cuando no uso startup.cs sino main.cs

Código

En una aplicación web, tendría el siguiente código en startup.cs :

public void ConfigureServices(IServiceCollection services)
{
    var connection = @"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.AspNet5;Trusted_Connection=True;";

    services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<BloggingContext>(options => options.UseSqlServer(connection));
}

Aquí tiene servicios que se configuran para entityframework7 y la cadena de conexión que usa SQL Server.

Intento

Busqué en GitHub, Google y Bing, pero solo encontré proyectos y código de muestra para aplicaciones web con EF7. No he encontrado una documentación que discuta EF7 con la aplicación de consola.

Quiero escribir el código anterior, pero tenerlo en mi main.cs para la aplicación de mi consola. No he tenido éxito, obviamente con lo siguiente en main.cs:

public void ConfigureServices(IServiceCollection services)
{
    var connection = @"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.AspNet5;Trusted_Connection=True;";

    services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<BloggingContext>(options => options.UseSqlServer(connection));
}

No tengo forma de decirle a mi programa cuál es la cadena de conexión y todavía tengo dudas de que sea la manera correcta de crear una instancia del contexto en main.cs también.

Agradecería cualquier ayuda, consejo o comentario con respecto a este interesante problema. Gracias.

Respuesta aceptada

Como Heavyd dijo que la mayor parte de eso no es necesario y es solo para configurar DI, bueno, así es como leo el código, podría estar equivocado.

En cuanto a establecer la cadena de conexión, usted podría simplemente hacer:

var connection = @"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.AspNet5;Trusted_Connection=True;";

SampleConsoleDbContext scab = new SampleConsoleDbContext(connection);

pasar la cadena de conexión al contexto.

puedes abstraer esto tanto como quieras, pero así es como pasarías la cadena de conexión a la instancia del contexto.


Respuesta popular

Microsoft realmente ha comenzado a compilar la documentación para Entity Framework 7.

Desde su ejemplo, solo puede hacer la configuración del contexto en línea anulando el método OnConfiguring:

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder builder)
    {
        builder.UseSqlServer(@"<connection string>");
    }
}

Y luego puedes crear instancias de tu contexto en Main:

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder builder)
    {
        builder.UseSqlServer(@"<connection string>");
    }
}

En los ejemplos de ASP.NET, las llamadas a .AddEntityFramework() permiten a EF utilizar el mismo Proveedor de servicios (piense en la inyección de dependencia) que el resto de ASP.NET (esto significa que EF obtendrá los mismos registradores, etc. que ASP). NET está utilizando). Pero si no desea seguir ese patrón, puede utilizar el enfoque que se muestra arriba.




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é