c# – 在ASP .Net Singleton注入类中使用DbContext

c# – 在ASP .Net Singleton注入类中使用DbContext,第1张

概述我需要在我的Startup类中实例化的Singleton类中访问我的数据库.似乎直接注入它会导致处理掉的DbContext. 我收到以下错误: Cannot access a disposed object. Object name: ‘MyDbContext’. 我的问题有两个:为什么这不起作用,如何在单例类实例中访问我的数据库? 这是我的Startup类中的ConfigureServices方 我需要在我的Startup类中实例化的Singleton类中访问我的数据库.似乎直接注入它会导致处理掉的DbContext.

我收到以下错误:

Cannot access a disposed object. Object name: ‘MyDbContext’.

我的问题有两个:为什么这不起作用,如何在单例类实例中访问我的数据库?

这是我的Startup类中的ConfigureServices方法:

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>();}

这是我的控制器类:

public class TestController : Controller{    private FunClass _fun;    public TestController(FunClass fun)    {        _fun = fun;    }    public List<string> Index()    {        return _fun.GetUsers();    }}

这是我的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;    }}
解决方法 它不起作用的原因是因为.AddDbContext扩展将每个请求添加为作用域.每个请求的范围通常是您想要的,通常每个请求将调用一次保存更改,然后dbcontext将在请求结束时处理.

如果你真的需要在单例中使用dbContext,那么你的FunClass类应该依赖于IServiceProvIDer和DbContextoptions而不是直接依赖于DbContext,这样你就可以自己创建它.

public class FunClass{    private GMBaseContext db;    public FunClass(IServiceProvIDer services,DbContextoptions dbOptions)     {        db = new GMBaseContext(services,dbOptions);    }    public List<string> GetUsers()    {         var lst = db.Users.Select(c=>c.Username).ToList();        return lst;    }}

也就是说,我的建议是仔细考虑你是否真的需要你的FunClass成为一个单身人士,我会避免这种情况,除非你有一个很好的理由让它成为一个单身人士.

总结

以上是内存溢出为你收集整理的c# – 在ASP .Net Singleton注入类中使用DbContext全部内容,希望文章能够帮你解决c# – 在ASP .Net Singleton注入类中使用DbContext所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1214319.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存