Verwenden Sie DbContext in ASP .Net Singleton Injected Class
Ich muss in einer Singleton-Klasse, die in meiner Startup-Klasse instanziiert wurde, auf meine Datenbank zugreifen. Es scheint, dass das direkte Injizieren zu einem DbContext führt, der entsorgt wird.
Ich erhalte den folgenden Fehler:
Kann nicht auf ein entsorgtes Objekt zugreifen. Objektname: 'MyDbContext'.
Meine Frage ist zweifach: Warum funktioniert das nicht und wie kann ich in einer Instanz einer Singleton-Klasse auf meine Datenbank zugreifen?
Hier ist meine ConfigureServices-Methode in meiner Startup-Klasse:
public void ConfigureServices(IServiceCollection services)
{
// code removed for brevity
services.AddEntityFramework().AddSqlServer().AddDbContext<MyDbContext>(
options =>
{
var config = Configuration["Data:DefaultConnection:ConnectionString"];
options.UseSqlServer(config);
});
// code removed for brevity
services.AddSingleton<FunClass>();
}
Hier ist meine Controller-Klasse:
public class TestController : Controller
{
private FunClass _fun;
public TestController(FunClass fun)
{
_fun = fun;
}
public List<string> Index()
{
return _fun.GetUsers();
}
}
Hier ist meine FunClass:
public class FunClass
{
private MyDbContext db;
public FunClass(MyDbContext ctx) {
db = ctx;
}
public List<string> GetUsers()
{
var lst = db.Users.Select(c=>c.UserName).ToList();
return lst;
}
}