私はこのことに関して同様の例をいくつか見てきましたが、私が間違っていることをまだ見ていないだけでは、言語について十分にわかりません。私はより多くのことを学ぶためにデモを一緒に作ったが、私は自分のデータベースをシードするのに困っている。ASP.NETコア2シードデータベース
私は、次のエラーが表示されます
モデル/ AppDbContext.cs
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
{
}
public DbSet<Product> Products{ get; set; }
public DbSet<Category> Categories { get; set; }
}
モデル/ DBInitializer.cs:ここ
InvalidOperationException: Cannot resolve scoped service 'demoApp.Models.AppDbContext' from root provider.
Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteValidator.ValidateResolution(Type serviceType, ServiceProvider serviceProvider)
は、問題の3つのファイルがあります
public static class DbInitializer
{
public static void Seed(IApplicationBuilder applicationBuilder)
{
//I'm bombing here
AppDbContext context = applicationBuilder.ApplicationServices.GetRequiredService<AppDbContext>();
if (!context.Products.Any())
{
// Add range of products
}
context.SaveChanges();
}
private static Dictionary<string, Category> _categories;
public static Dictionary<string, Category> Categories
{
get
{
if (_categories == null)
{
// Add categories...
}
return _categories;
}
}
}
Startup.cs
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<ICategoryRepository, CategoryRepository>();
services.AddTransient<IProductRepository, ProductRepository>();
services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
app.UseStatusCodePages();
// Kersplat!
DbInitializer.Seed(app);
}
else ...
app.UseStaticFiles();
app.UseMvc(routes => {...});
}
誰かが私が間違っているとどのような状況を改善するためにしていますどのような説明を助けることはできますか?オリジナル回答から
'Main'を改造するのはなぜですか?これが好きであると言及されている参考資料はありますか? –
私はあなたが提供したリンクを大変ありがとうございます。上のコードのすぐ下にリンクされた記事でそれを言及しません。 "以前のチュートリアルでは、Startup.csのConfigureメソッドで同様のコードが表示されることがありますが、Configureメソッドを使用してリクエストパイプラインを設定することをお勧めします。 – palehorse
NB:CreateScopeメソッドを使用できるようにするには、using using Microsoft.Extensions.DependencyInjection;を使用する必要があります。 – JohnLBevan