Come utilizzare EF7 e connettersi a SQL Server senza startup.cs nell'applicazione console Beta 8 di ASP.NET 5?

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

Domanda

Problema

Sto scrivendo un'applicazione di esempio per console asp.net 5 e voglio usare Entity Framework 7 per parlare al mio back-end. So come fare questo in un'applicazione web, ma mi sono perso per come farlo per un'applicazione console quando non si utilizza startup.cs ma main.cs

Codice

In un'applicazione Web, avresti il ​​seguente codice in 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));
}

Qui sono configurati i servizi per entityframework7 e la stringa di connessione che utilizza SQL Server.

Tentativo

Ho consultato GitHub, Google e Bing, ma ho trovato solo esempi di progetti e codice per le applicazioni Web con EF7. Non ho trovato una documentazione che discute EF7 con l'applicazione console.

Voglio scrivere il codice sopra, ma averlo nel mio main.cs per la mia applicazione console. Non ho avuto successo, ovviamente con quanto segue in 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));
}

Non ho modo di dire al mio programma quale sia la stringa di connessione e ho ancora dei dubbi su questo è il modo giusto per ottenere il contesto istanziato anche in main.cs

Gradirei qualsiasi aiuto, consiglio o commento riguardo a questo interessante problema. Grazie.

Risposta accettata

Come heavyd detto la maggior parte, che non è necessario e solo per la creazione di DI, thats bene anche quanto ho letto il codice, potrebbe essere sbagliato.

Per quanto riguarda l'impostazione della stringa di connessione, si potrebbe fare semplicemente:

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

SampleConsoleDbContext scab = new SampleConsoleDbContext(connection);

passare la stringa di connessione al contesto.

puoi astrarre tutto ciò che vuoi, ma in questo modo passerai la stringa di connessione all'istanza del contesto.


Risposta popolare

Microsoft ha effettivamente iniziato a creare la documentazione per Entity Framework 7.

Dal loro esempio puoi semplicemente eseguire la configurazione del contesto in linea sovrascrivendo il metodo 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>");
    }
}

E poi puoi semplicemente creare istanze del tuo contesto in 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>");
    }
}

Negli esempi ASP.NET, le chiamate a .AddEntityFramework() consentono a EF di utilizzare lo stesso provider di servizi (think dependency injection) come il resto di ASP.NET (ciò significa che EF otterrà gli stessi logger ecc. ASP. NET sta usando). Ma se non vuoi seguire questo schema, puoi semplicemente usare l'approccio mostrato sopra.




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é