Zur Entwurfszeit DbContext-ErstellungDesign-time DbContext Creation

Einige der Befehle eine DbContext-Instanz zu erstellenden Daten am Entwurf erfordern EF Tools Zeit (z. B. bei der Migrationen Befehle ausführen zu können).Some of the EF Tools commands require a DbContext instance to be created at design time (for example, when running Migrations commands). Es gibt verschiedene Möglichkeiten, die die Tools versuchen, ihn zu erstellen.There are various ways the tools try to create it.

Von Application-DiensteFrom application services

Ist Ihr Startprojekt eine ASP.NET Core-app, versuchen Sie die Tools, den DbContext-Objekt von der Anwendung Service-Anbieter abzurufen.If your startup project is an ASP.NET Core app, the tools try to obtain the DbContext object from the application's service provider. Sie erhalten sie durch den Aufruf Program.BuildWebHost() und den Zugriff auf die IWebHost.Services Eigenschaft.They obtain it by invoking Program.BuildWebHost() and accessing the IWebHost.Services property. Mit jeder DbContext registriert IServiceCollection.AddDbContext<TContext>() gefunden und auf diese Weise erstellt werden kann.Any DbContext registered using IServiceCollection.AddDbContext<TContext>() can be found and created this way. Dieses Muster wurde in ASP.NET Core 2.0 eingeführtThis pattern was introduced in ASP.NET Core 2.0

Mithilfe des StandardkonstruktorsUsing the default constructor

Wenn von der Anwendung-Service-Anbieter ' DbContext ' abgerufen werden kann, suchen Sie die Tools für den DbContext-Typ innerhalb des Projekts ein.If the DbContext can't be obtained from the application service provider, the tools look for the DbContext type inside the project. Sie versuchen, ihn mit seinem Standardkonstruktor erstellen.They try to create it using its default constructor.

Aus einer Factory zur EntwurfszeitFrom a design-time factory

Können die Tools zum Erstellen Ihrer DbContext implementieren auch erkennen IDesignTimeDbContextFactory.You can also tell the tools how to create your DbContext by implementing IDesignTimeDbContextFactory. Wenn eine Klasse, die diese Schnittstelle implementiert, innerhalb des Projekts gefunden wird, umgehen die Tools weitere Möglichkeiten zum Erstellen von ' DbContext ' aus.If a class implementing this interface is found inside your project, the tools bypass the other ways of creating the DbContext. Zur Entwurfszeit wird stets der Factory verwendet.They always use the factory at design time. Eine Factory ist besonders nützlich, wenn Sie ' DbContext ' für die Entwurfszeit als zur Laufzeit unterschiedlich konfigurieren müssen.A factory is especially useful if you need to configure the DbContext differently for design time than at runtime.

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;

namespace MyProject
{
    public class BloggingContextFactory : IDesignTimeDbContextFactory<BloggingContext>
    {
        public BloggingContext CreateDbContext(string[] args)
        {
            var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>();
            optionsBuilder.UseSqlite("Data Source=blog.db");

            return new BloggingContext(optionsBuilder.Options);
        }
    }
}

Hinweis

Die args Parameter wird derzeit nicht verwendet.The args parameter is currently unused. Es ist ein Problem verfolgen die Möglichkeit, Argumente in den Tools anzugeben.There is an issue tracking the ability to specify design-time arguments from the tools.