如何创建 DbContext

How to create DbContext

低于控制器中的默认代码工作正常

public ProductController(appDbContext parmContext)
{
    _context = parmContext;
}

现在我想添加 DAL,在创建类型为 appDbContext 的对象时出错,pass/set 为 parmContext 做什么?

下面是Startup.cs

中的连接
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    services.AddDbContext<appDbContext>(config => 
    {
        config.UseMySql(Configuration.GetConnectionString("PreSales"));
});
}

下面是我要使用的代码

public IEnumerable<ProductStatusMaster> GetProductStatusFRdal()

    // here I ant to create object of DBcontext (i.e. _context)

    {
        try
            {
                 var msm = _context.ProductStatusMaster
                    .Where(s => s.ActiveYn == 1 )
                    .OrderBy(s => s.Status)
                    .ToList();

                return msm;
            }
            catch
            {
                throw;
            }
    }

让我得到答案。

有两种方法可以实现你想要的代码。 1) 通过控制器 DI。 2) 通过服务定位器模式(反模式)。

通过代码:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    services.AddDbContext<appDbContext>(config => 
    {
        config.UseMySql(Configuration.GetConnectionString("PreSales"));
});
}

您为 DbContext 设置了依赖项并配置了连接参数。因此,对于第一种方法,您应该通过控制器传递依赖项。可能的代码将是这样的:

public class MyTestAppController
{
     private appDbContext _context;

     public MyTestApController(appDbContext externalAppDbContext)
     {
         _context = externalAppDbContext;
     }

     public IEnumerable<ProductStatusMaster> GetProductStatusFRdal()
     {
        try
            {
                 var msm = _context.ProductStatusMaster
                    .Where(s => s.ActiveYn == 1 )
                    .OrderBy(s => s.Status)
                    .ToList();

                return msm;
            }
            catch
            {
                throw;
            }
    }
}

2) 使用服务定位器模式

在这种情况下,您应该使用 IServiceProvider 依赖项。代码示例如下:

public class MyTestAppController
{
   private IServiceProvider _provider; 

   public MyTestAppController(IServiceProvider provider) => _provider = provider; 

   public IEnumerable<ProductStatusMaster> GetProductStatusFRdal() 
   {
      var _context = _provider.GetService<appDbContext>(); 

      try 
      { 
           var msm = _context.ProductStatusMaster .Where(s => s.ActiveYn == 1 ) 
                     .OrderBy(s => s.Status) .ToList(); return msm; 
      } 
      catch { throw; }
   }
}