Как создать DbContext - PullRequest
       13

Как создать DbContext

0 голосов
/ 18 марта 2019

ниже кода по умолчанию в контроллере, работающем нормально

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 голосов
/ 18 марта 2019

Позвольте мне получить ответ.

Есть 2 способа реализовать нужный код.1) Через контроллер DI.2) Через шаблон локатора службы (antipattern).

С помощью кода:

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) Использование шаблона Service Locator

В этом случае вам следует использовать зависимость 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; }
   }
}
...