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.