ASP.Net Coreに移行する前に、Ninject
を使用して、エンティティフレームワークデータベースコンテキストを一般的な方法で挿入することができました。例えば:私は、次の操作を行う場合はASP.Net MVCのコアでASP.Net Core MVC:Base Typeによる依存性注入
Bind<DbContext>().To<MyActualDbContext>();
は、AddDbContext
を使用した場合、それが未解決であることのサービスになります。
AddDbContext<MyActualDbContext>(x=> x.UseSqlServer("..."));
---
public class TestController: Controller {
public DbContext Db {get; private set;}
public TestController(DbContext Db){
this.Db = Db;
}
}
は私がAddDbContext
は、特別EFデータコンテキストを処理するために使用するために開発されてきたので、私は、しかし、AddSingleton
またはAddScoped
のいずれかを使用してこの問題を解決することができることを知って、私はにどのような方法がありますかどうかを知りたいのですがその方法を使ってこれを達成する。
AddDbContext
がこの動作をサポートしていない場合は、どちらの方法がより良いでしょうかAddSingletone
またはAddScoped
?私はAddScoped
がリクエストごとに1回サービスをインスタンス化することを知っていますが、シングルトンが潜在的な問題を引き起こすかどうかを知りたいと思います。私はこれらの2つのメソッドを使用してもED DbContextの場合には不都合がないことを確認したいと思います。
DbContextには、 "Set <>、Add <>、Entity <>などのメソッドがあります。 dbを一般的な方法で使用することができます。同じデータベースに対して異なるコンテキストがあるとします。 – Arrrr
'AddTransient'は良いアイデアではありません(EFのトラッキングメカニズムのため)。 – Arrrr
この場合、オブジェクトの存続期間は 'AddDbContext'によって制御されるので、問題はありません。スコープで登録すると、 'services.AddScoped(provider => provider.GetRequiredService provider.GetRequiredService () 'はスコープ付きインスタンスも常に返します。 ' –
Tseng