Comment utiliser EF7 et se connecter à SQL Server sans startup.cs dans l'application console ASP.NET 5 Beta 8?

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

Question

Problème

J'écris actuellement un exemple d'application de la console asp.net 5 et je souhaite utiliser Entity Framework 7 pour parler à mon serveur. Je sais comment faire cela dans une application Web, mais je ne sais pas comment faire cela pour une application console lorsque vous n'utilisez pas startup.cs mais main.cs

Code

Dans une application Web, vous devriez avoir le code suivant dans 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));
}

Ici, vous avez des services en cours de configuration pour entityframework7 et la chaîne de connexion qui utilise SQL Server.

Tentative

J'ai consulté GitHub, Google et Bing, mais je n'ai trouvé que des exemples de projets et du code pour les applications Web avec EF7. Je n'ai pas trouvé de documentation traitant d'EF7 avec l'application console.

Je veux écrire le code ci-dessus, mais l'a dans mon main.cs pour mon application console. Je n'ai pas eu de succès, évidemment avec ce qui suit dans main.cs:

SampleConsoleDbContext scab = new SampleConsoleDbContext();

Je n'ai aucun moyen de dire à mon programme quelle est la chaîne de connexion et je doute toujours que ce soit le bon moyen d'instancier le contexte dans main.cs

J'apprécierais toute aide, conseil ou commentaire concernant ce problème intéressant. Je vous remercie.

Réponse acceptée

Comme le dit si bien, la majeure partie de ce processus n’est pas nécessaire et sert uniquement à la configuration de DI, et c’est aussi de cette façon que je lis le code que l’on pourrait avoir tort.

En ce qui concerne la définition de la chaîne de connexion, vous pouvez simplement faire:

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

SampleConsoleDbContext scab = new SampleConsoleDbContext(connection);

passe la chaîne de connexion au contexte.

vous pouvez le résumer autant que vous le souhaitez, mais c’est ainsi que vous transmettriez la chaîne de connexion à l’instance du contexte.


Réponse populaire

Microsoft a en fait commencé à créer la documentation pour Entity Framework 7.

À partir de leur exemple, vous pouvez simplement configurer le contexte en ligne en redéfinissant la méthode 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>");
    }
}

Et vous pouvez simplement créer des instances de votre contexte dans Main:

class Program
{
    static void Main(string[] args)
    {
        using (var db = new BloggingContext())
        {
            db.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/adonet" });
            var count = db.SaveChanges();
            Console.WriteLine("{0} records saved to database", count);

            Console.WriteLine();
            Console.WriteLine("All blogs in database:");
            foreach (var blog in db.Blogs)
            {
                Console.WriteLine(" - {0}", blog.Url);
            }
        }
    }
}

Dans les exemples ASP.NET, les appels à .AddEntityFramework() permettent à EF d’utiliser le même fournisseur de service (pensez à l’injection de dépendance) que le reste de ASP.NET (cela signifie que EF obtiendra les mêmes enregistreurs, etc. que ASP. NET utilise). Mais si vous ne voulez pas suivre ce modèle, vous pouvez simplement utiliser l'approche présentée ci-dessus.



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