如何创建DbContext

时间:2019-03-18 12:40:40

标签: asp.net core ef-core-2.2

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

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

现在我想添加DAL,在创建appDbContext类型的对象时出错,为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 个答案:

答案 0 :(得分:0)

让我得到答案。

有两种方法可以实现所需的代码。 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; }
   }
}