Öncelikle veritabanımı örnek verilerle doldurmaya çalışıyorum. Ben varsayılan seçenekleri ile ASP.NET Core'u 2.0 kullanıyorumASP.NET Çekirdek 2.0'de DbContext çözümlenemiyor
(ASP.NET Core RC2 Seed Database bakınız) bu (yılında Startup.Configure) bunu yapmanın yolu olduğunu okudum.
Her zamanki gibi, DbContext
numaramı ConfigureServices
'a kaydediyorum. Ama bundan sonra Startup.Configure yönteminde, ben denemek ne zaman GetRequiredService
kullanarak çözmek için, bu mesajla atar:
iletisi: SGDTP.Infrastructure.Context 'hizmetini kapsamlı çözemezse'. SGDTPContext 'kökünden sağlayıcısı.' Böyle
Benim Başlangıç sınıfı: Neyi yanlış yapıyorum
public abstract class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<SGDTPContext>(options => options.UseInMemoryDatabase("MyDatabase"))
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
SeedDatabase(app);
}
private static void SeedDatabase(IApplicationBuilder app)
{
using (var context = app.ApplicationServices.GetRequiredService<SGDTPContext>())
{
// Seed the Database
//...
}
}
}
? Ayrıca, bu, tohum verileri oluşturmak için en uygun yer mi?
Siz adamsınız. Bilgi için büyük, büyük teşekkürler. Bir hayat kurtardın! – SuperJMN
_does, gördüğüm şeyden tohumlamak için önerilen yaklaşım olmaya devam ediyor. Tam olarak değil. Kapsamlı Evet kullanarak, ancak Yapılandırma yöntemini kullanarak, EF Çekirdek 2.0, tasarım zamanında DbContext'in keşfini ve gerçekleştirilmesini yapar. Şu anda önerilen yaklaşım için https://stackoverflow.com/a/45942026/455493 adresine bakın. Eğer 'Configure' yönteminde tohumlama yapmaya devam ederseniz, o zaman 'dotnet ef geçişleri' veya 'dotnet ef veritabanı güncellemesi' çalıştırılıyor, aynı zamanda komut satırı araçlarını çalıştırırken hemen hemen hiç istemediğiniz bir şey olan tohumlama işlemi de yürütülür (sadece – Tseng
Sadece FYI; [IServiceProvider' üzerinde doğrudan bir 'CreateScope' uzantısı yöntemi var] (https://github.com/aspnet/DependencyInjection/blob/88c3bd6fe2786dd759b4a6c6d7c410e895336b6c/src/DI.Abstractions/ServiceProviderServiceExtensions.cs#L120-L128), böylece kesebilirsiniz '.GetRequiredService() 've bunu doğrudan arayın :) –
khellang