Birden Çok Sağlayıcı ile Geçişler

EF Core Araçları yalnızca etkin sağlayıcı için yapı iskelesi geçişleri yapar. Ancak bazen DbContext'inizle birden fazla sağlayıcı (örneğin Microsoft SQL Server ve SQLite) kullanmak isteyebilirsiniz. Her sağlayıcı için bir tane olmak üzere birden çok geçiş kümesi tutarak ve her model değişikliği için her birine bir geçiş ekleyerek bunu işleyin.

Birden çok bağlam türü kullanma

Birden çok geçiş kümesi oluşturmanın bir yolu, sağlayıcı başına bir DbContext türü kullanmaktır.

class SqliteBlogContext : BlogContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder options)
        => options.UseSqlite("Data Source=my.db");
}

Yeni geçişler eklerken bağlam türünü belirtin.

dotnet ef migrations add InitialCreate --context BlogContext --output-dir Migrations/SqlServerMigrations
dotnet ef migrations add InitialCreate --context SqliteBlogContext --output-dir Migrations/SqliteMigrations

Bahşiş

Son geçişe eşdüzey olarak oluşturulduklarından sonraki geçişler için çıkış dizinini belirtmeniz gerekmez.

Bir bağlam türü kullanma

Tek bir DbContext türü de kullanılabilir. Bunun için şu anda geçişlerin ayrı bir derlemeye taşınması gerekir. Projelerinizi ayarlama yönergeleri için lütfen Ayrı GeçişLer Projesi Kullanma bölümüne bakın.

Bahşiş

Bu makalenin örneğini GitHub'da görüntüleyebilirsiniz.

Araçlardan uygulamaya bağımsız değişkenler geçirebilirsiniz. Bu, araçları çalıştırırken projede el ile değişiklik yapmaktan kaçınan daha kolay bir iş akışı sağlayabilir.

Genel Ana Bilgisayar kullanırken iyi çalışan bir desen aşağıdadır.

public static IHostBuilder CreateHostBuilder(string[] args)
    => Host.CreateDefaultBuilder(args)
        .ConfigureServices(
            (hostContext, services) =>
            {
                services.AddHostedService<Worker>();

                // Set the active provider via configuration
                var configuration = hostContext.Configuration;
                var provider = configuration.GetValue("Provider", "SqlServer");

                services.AddDbContext<BlogContext>(
                    options => _ = provider switch
                    {
                        "Sqlite" => options.UseSqlite(
                            configuration.GetConnectionString("SqliteConnection"),
                            x => x.MigrationsAssembly("SqliteMigrations")),

                        "SqlServer" => options.UseSqlServer(
                            configuration.GetConnectionString("SqlServerConnection"),
                            x => x.MigrationsAssembly("SqlServerMigrations")),

                        _ => throw new Exception($"Unsupported provider: {provider}")
                    });
            });

Varsayılan konak oluşturucu komut satırı bağımsız değişkenlerinden yapılandırmayı okuduğundan, araçları çalıştırırken sağlayıcıyı belirtebilirsiniz.

dotnet ef migrations add MyMigration --project ../SqlServerMigrations -- --provider SqlServer
dotnet ef migrations add MyMigration --project ../SqliteMigrations -- --provider Sqlite

Bahşiş

Belirteç, -- izleyen her şeyi bağımsız değişken olarak ele almaya yönlendirir dotnet ef ve bunları seçenek olarak ayrıştırmaya çalışmaz. tarafından dotnet ef kullanılmayan ek bağımsız değişkenler uygulamaya iletilir.