Tworzenie typu DbContext w czasie projektowaniaDesign-time DbContext Creation

Niektóre narzędzia EF polecenia wymagają wystąpienie typu DbContext ma zostać utworzony na projekt czasu (na przykład podczas uruchamiania polecenia migracji).Some of the EF Tools commands require a DbContext instance to be created at design time (for example, when running Migrations commands). Istnieją różne sposoby narzędzia spróbuj utworzyć ją.There are various ways the tools try to create it.

Z usługi aplikacjiFrom application services

Twój projekt startowy w przypadku aplikacji platformy ASP.NET Core, narzędzia próby uzyskania obiektu DbContext z dostawcy usług aplikacji.If your startup project is an ASP.NET Core app, the tools try to obtain the DbContext object from the application's service provider. Otrzymają wywołując Program.BuildWebHost() i uzyskiwania dostępu do IWebHost.Services właściwości.They obtain it by invoking Program.BuildWebHost() and accessing the IWebHost.Services property. Wszelkie DbContext zarejestrowana przy użyciu IServiceCollection.AddDbContext<TContext>() należy znaleźć i utworzone w ten sposób.Any DbContext registered using IServiceCollection.AddDbContext<TContext>() can be found and created this way. Ten wzorzec został wprowadzone w programie ASP.NET 2.0 CoreThis pattern was introduced in ASP.NET Core 2.0

Za pomocą konstruktora domyślnegoUsing the default constructor

Jeśli kontekstu DbContext nie można uzyskać od dostawcy usług aplikacji, narzędzia wyszukiwania dla typu DbContext wewnątrz projektu.If the DbContext can't be obtained from the application service provider, the tools look for the DbContext type inside the project. Próbują utworzyć za pomocą jego domyślny konstruktor.They try to create it using its default constructor.

Z fabryki czasu projektowaniaFrom a design-time factory

Możesz także wybrać narzędzia sposobu tworzenia sieci DbContext zaimplementowanie IDesignTimeDbContextFactory.You can also tell the tools how to create your DbContext by implementing IDesignTimeDbContextFactory. Jeśli do klasy implementującej interfejs ten znajduje się wewnątrz projektu, narzędzia obejścia inne sposoby tworzenia kontekstu DbContext.If a class implementing this interface is found inside your project, the tools bypass the other ways of creating the DbContext. Fabryka oni zawsze używać w czasie projektowania.They always use the factory at design time. Fabryka jest szczególnie przydatne, jeśli konieczne będzie skonfigurowanie kontekstu DbContext inaczej dla czasu projektowania niż w czasie wykonywania.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);
        }
    }
}

Uwaga

args Parametr jest aktualnie używana.The args parameter is currently unused. Brak problemu śledzenia umożliwia określenie argumentów czasu projektowania w menu Narzędzia.There is an issue tracking the ability to specify design-time arguments from the tools.