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 DbContext oluşturmak için çeşitli yollar dener.
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);
}
}
Tasarım zamanı fabrikası, tasarım zamanı için çalışma zamanından DbContext öğesini farklı yapılandırmanız gerekiyorsa, DbContext oluşturucusunun DI'de kayıtlı olmayan ek parametreler alması durumunda, DI'yı hiç kullanmıyorsanız veya bir nedenden dolayı ASP.NET Core uygulamanızdaki CreateHostBuilder sınıfında bir Main yöntemi istemiyorsanız özellikle yararlı olabilir.
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.