在ASP.NET Core Mvc中使用IDbContextFactory註冊EF Core

asp.net-core-mvc c# entity-framework-core

我創建了一個項目App.Data ,它包含域對象和一個實現IDbContextFactory<T>的基類,用於創建DbContext 。代碼可在此處獲得

在單獨的程序集中生成遷移很有效。

在asp.net mvc中註冊實體框架時,我想利用我在App.Data.Sql中創建的上下文,該上下文是通過SqlDbContextFactory<MyAppDbContext>創建的。

我想要的是類似的東西

services.AddEntityFrameworkSqlServer()
.AddDbContext(typeof(SqlDbContextFactory<MyAppDbContext>))

將其註冊為單例不起作用,因為在解決時抱怨沒有配置提供程序。

services.AddSingleton<IDbContextFactory<..>, SqlDbContextFactory<..>>();
services.AddScoped<MyApp..>(p => p.GetRequiredService<IDb..>().Create());

熱門答案

而不是.AddDbContext(typeof(...))提供工廠方法來創建上下文:

services.AddTransient(provider =>
{
    //if needed: anything from DI
    var bar = provider.GetService<TBar>();

    //if needed: external captured variable
    doSomething(service);

    //explicit context creation
    return new FooDbContext(...);
});


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow