获取Asp.net样板库使用的DbContext实例

时间:2018-09-19 13:27:05

标签: c# entity-framework aspnetboilerplate

我使用Aspnet Boiler板开始了一个新项目,但不再觉得要在后台使用存储库和大量隐藏的工程。

  

因此期待获得实例化的实例数据库上下文   Abp存储库框架和

  1. 直接使用Ef核心LINQ查询。
  2. 直接使用SaveChanges提交更改,而不是依靠 抽象的交易。

请问如何获取该实例?

2 个答案:

答案 0 :(得分:5)

  
      
  1. 直接使用Ef核心LINQ查询。
  2.   

您可以使用DbContext的{​​{1}}获得GetDbContext()的实例。

IDbContextProvider
  
      
  1. 直接使用SaveChanges提交更改,而不是依赖抽象的事务。
  2.   

您可以通过应用private readonly YourDbContext _ctx; public YourService(IDbContextProvider<YourDbContext> dbContextProvider) { _ctx = dbContextProvider.GetDbContext(); } 属性来禁用交易

Here是有关使用ASP.NET Boilerplate进行事务管理的相关文章。

答案 1 :(得分:0)

@NitinSawant我有一个类似的问题,尽管就我而言,所涉及的参数专门称为unitOfWork。我有一个通过模块的Postinitialize方法运行的数据库清除和更新种子帮助程序类:

public override void PostInitialize()
{
    // The hypothetical 'SweeperClass' in this example uses constructor
    // injection to obtain a IDbContextProvider instance and from there
    // get hold of a DbContext.
    //
    // As written, this code threw a null argument exception.

    var sweeperClass = IocManager.Resolve<SweeperClass>();
    // ...do stuff...
}

在这种情况下,幸运的是,还需要解决一个工作单元来包装另一个对象的构造的问题。

using Abp.Domain.Uow;

public override void PostInitialize()
{
    using (IocManager.Resolve<IUnitOfWorkManager>().Begin())
    {
        var sweeperClass = IocManager.Resolve<SweeperClass>();
        // ...do stuff...
    }
}

@koryakinp的答案为我提供了大部分解决方案,我只需要进行上述调整即可使特定用例的工作顺利进行。