Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
EF Core Tools komutlarından bazıları (örneğin , Geçişler komutları), uygulamanın varlık türleri ve bunların bir veritabanı şemasıyla nasıl eşlendiği hakkında ayrıntılı bilgi toplamak için tasarım zamanında türetilmiş DbContext bir örneğin oluşturulmasını gerektirir. Çoğu durumda, oluşturulan öğesinin DbContext çalışma zamanında nasıl yapılandırılacağına benzer bir şekilde yapılandırılması istenir.
Araçların oluşturmak DbContextiçin deneyecekleri çeşitli yollar vardır.
IDesignTimeDbContextFactory<TContext> bulunursa, araçlar bunu diğer oluşturma desenleri yerine kullanır. Tasarım zamanı fabrikası, ayrı bir geçiş projesi ve başlangıç projesi platforma özgü uygulamalar için önerilen desendir.
Uygulama hizmetlerinden
Başlangıç projeniz ASP.NET Core Web Konağı veya .NET Core Genel Ana Bilgisayarı kullanıyorsa, araçlar uygulamanın hizmet sağlayıcısından DbContext nesnesini almaya çalışır.
Önce Program.CreateHostBuilder() çağrılarak,Build() daha sonra Services özelliğine erişilerek hizmet sağlayıcısı almaya çalışılır.
public class Program
{
public static void Main(string[] args)
=> CreateHostBuilder(args).Build().Run();
// EF Core uses this method at design time to access the DbContext
public static IHostBuilder CreateHostBuilder(string[] args)
=> Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(
webBuilder => webBuilder.UseStartup<Startup>());
}
public class Startup
{
public void ConfigureServices(IServiceCollection services)
=> services.AddDbContext<ApplicationDbContext>();
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
}
}
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
Note
Yeni bir ASP.NET Core uygulaması oluşturduğunuzda, bu kanca varsayılan olarak eklenir.
Uygulamanın hizmet sağlayıcısında, DbContext kendisi ve oluşturucusunda bulunan tüm bağımlılıkların hizmet olarak kaydedilmesi gerekir. Bu, bir DbContext üzerinde DbContextOptions<TContext> örneğini bağımsız değişken olarak alan bir oluşturucuya sahip olarak ve AddDbContext<TContext> yöntemini kullanarak kolayca elde edilebilir.
Parametresiz bir oluşturucu kullanma
DbContext uygulama hizmeti sağlayıcısından alınamıyorsa, araçlar projenin içindeki türetilmiş DbContext türü arar. Ardından parametresiz bir oluşturucu kullanarak örnek oluşturmaya çalışırlar. yöntemi kullanılarak DbContext yapılandırılmışsaOnConfiguring, bu varsayılan oluşturucu olabilir.
Tasarım sürecinde bir fabrikadan
Ayrıca arabirimini uygulayarak Microsoft.EntityFrameworkCore.Design.IDesignTimeDbContextFactory<TContext> DbContext'inizi nasıl oluşturabileceğinizi araçlara da anlatabilirsiniz: Bu arabirimi uygulayan bir sınıf türetilenle DbContext aynı projede veya uygulamanın başlangıç projesinde bulunursa, araçlar DbContext oluşturmanın diğer yollarını atlar ve bunun yerine tasarım zamanı fabrikasını kullanır.
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);
}
}
Bağlam oluşturucunun DI'de kayıtlı olmayan bağımlılıkları varsa, DI kullanmıyorsanız veya uygulama başlatma projesi araçlar tarafından yürütülemiyorsa, tasarım zamanı fabrikası özellikle yararlı olabilir.
Uygulamanın çalışma zamanında kullandığı tasarım zamanında aynı sağlayıcıyı, model seçeneklerini ve geçiş derlemesini yapılandırın. Aksi takdirde, araçlar uygulama tarafından kullanılan modelden farklı bir model için geçişleri iskeleleştirebilir. İsteğe bağlı bir komut satırı bağımsız değişkeni olduğunu varsaymayın; bağımsız değişkenleri doğrulayın ve uygun bir geliştirme varsayılanı veya yapılandırma kaynağı sağlayın.
Args
Hem IDesignTimeDbContextFactory<TContext>.CreateDbContext hem de Program.CreateHostBuilder komut satırı argümanlarını kabul eder.
Araçlardan bu argümanları seçebilirsiniz.
dotnet ef database update -- --environment Production
-- belirteci, dotnet ef her şeyi bir bağımsız değişken olarak ele almaya yönlendirir 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.