現在の.Netコアアプリケーションを1.1から2.0にアップグレードしようとしています。型 'CoreContext'のDbContextは、DbContextOptions型の単一パラメータを受け入れる単一のパブリックコンストラクタを持たないためプールできません。DbContextOptions型の単一のパラメータを受け入れる単一のパブリックコンストラクタがないため、型のDbContextをプールできません。
これは、新しいIServiceCollection.AddDbContextPool <>関数を使用することによって発生します。 IServiceCollection.AddDbContext <を使用すると、それでも動作します。
このアプリケーションはDB-Firstであるため、Scaffold-DbContextを使用してすべてのコンテキストを生成します。その、と私はこのようなすべてのコンテキストの拡張子を持っている他のサービスを注入する必要性のために:私は足場-DbContextを実行するたびに
public partial class CoreContext
{
public CoreContext(
DbContextOptions<CoreContext> options,
IUserService userService,
IAuditRepository auditRepository
) : base(options) {...}
}
を私はちょうどCoreContextから自動生成されたコンストラクタを削除し、私はそれを置く場合でも、そこに私はまだこのエラーが発生します。
public partial class CoreContext : DbContext
{
public CoreContext(DbContextOptions<CoreContext> options) : base(options) {}
}
私はすでに新しいスタイルへのProgram.csを更新しました:
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
}
そしてStartup.csは非常に簡単です:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
...
services.AddDbContextPool<CoreContext>(options => options.UseSqlServer(absConnectionString));
...
}
場合、私はDIのためAutofacを使用していますそれは助ける。今のところ、私はPooling以外の代替手段に戻すことにしますが、この機能を利用するといいでしょう。
私は同じ問題があります。あなたはそれを回避する方法を発見しましたか、または非プールに戻っていますか?この新しい機能を使用できることは素晴らしいことでしょう。 – grokky
私は非プールオプションに戻りました。まだそれを嘆く時間を持っていない、移動する必要があります。 –