Birden Çok Sağlayıcı ile Geçişler
EF Core Araçları yalnızca etkin sağlayıcı için geçişlerin iskelesi kurun. Ancak, bazı durumlarda DbContext'iniz ile birden fazla sağlayıcı (Microsoft SQL Server ve SQLite gibi) kullanmak istemeniz gerekebilir. Bunu işlemek için her sağlayıcı için bir tane olmak ve her model değişikliği için her bir geçiş kümesine geçiş eklemek için birden çok geçiş kümesi kullanabilirsiniz.
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
İpucu
Sonraki geçişler için çıkış dizinini belirtmenize gerek yok çünkü bunlar son geçişe bire bir ikiz olarak oluşturulur.
Tek bir bağlam türü kullanma
Bir DbContext türü de kullanabilirsiniz. Bu şu anda geçişlerin ayrı bir derlemeye taşınmayı gerektirir. Projelerinizi ayarlamaya ilişkin yönergeler için Project Ayrı Geçişler Kullanma kılavuzuna bakın.
İpucu
Bu makalenin örneğini GitHub.
5 EF Core 5.0'dan başlayarak araçlardan uygulamaya bağımsız değişkenler atabilirsiniz. Bu, araçları çalıştırarak projede el ile değişiklik yapmak zorunda kalmadan daha kolaylaştırılmış bir iş akışına olanak sağlar.
Genel Ana Bilgisayar kullanırken iyi çalışan bir desen şu şekildedir:.
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ırarak sağlayıcıyı belirtebilirsiniz.
dotnet ef migrations add MyMigration --project ../SqlServerMigrations -- --provider SqlServer
dotnet ef migrations add MyMigration --project ../SqliteMigrations -- --provider Sqlite
İpucu
Belirteç, -- aşağıdaki her şeyi bağımsız değişken olarak kabul eder ve bunları seçenek olarak dotnet ef ayrıştırmayı denemez. tarafından kullanılmamış ek bağımsız dotnet ef değişkenler uygulamaya iletildi.
Not
Uygulama için ek bağımsız değişkenler belirtme özelliği, 5.0 EF Core eklendi. Daha eski bir sürüm kullanıyorsanız, bunun yerine yapılandırma değerlerini ortam değişkenleriyle belirtin.