如何在 class 文件中引用 DbContext .NET 6 EF

How to reference DbContext in a class file .NET 6 EF

更新:将 DI 添加到顶部。 @inject ApplicationDbContext 数据库

razor 页面之外。我有一个实用程序 class 并且需要从 EF 查询数据库以获取要填充到 razor 部分中的值。

在_MenuPartial中需要构造一个class并获取值

@{
     WebMessageManagement wm = new WebMessageManagement(???dbcontext???);
     wm.GetMessageCount(); //returns int
 }

_Menu部分代码片段:

在 WebMessageManagement class 我有这个:

  public class WebMessageManagement  
    {    
        ApplicationDbContext _db;
      
        public WebMessageManagement(ApplicationDbContext db)
        {
            _db = db; 
        }
        public int GetMessageCount()
        {
            var count = (from o in _db.WebMessages
                         where o.Id >= 3109
                         from t in o.Email
                         select t).Count();
            return count;
        }
    }

普通的 razor 页面似乎注入了 ApplicationDbContext。但我正在创建一个 class 外部剃刀页面。我是否需要为非剃须刀再次设置此上下文?

注入将对象放入到控制器的网络请求中(99% 的时间,除非你做的事情非常花哨)。在这种情况下,您可以将上下文作为变量传递给 class 函数。

WebMessageManagement wm = new WebMessageManagement();
wm.GetMessageCount(dbcontext); //returns int

然后在 class 文件中

public class WebMessageManagement  
{    
  
    public WebMessageManagement()
    {
        
    }
    public int GetMessageCount(ApplicationDbContext db)
    {
        var count = (from o in db.WebMessages
                     where o.Id >= 3109
                     from t in o.Email
                     select t).Count();
        return count;
    }
}

我想这会给你所需要的。

您还需要注入新的 class。 Dependency Injection will figure out how to use your constructor and inject the ApplicationDbContext for you, given that its also registered for dependency injection

services.AddScoped<WebMessageManagement>()