如何使用结构图以线程安全的方式注入数据库上下文?

问题描述 投票:0回答:0

数据库上下文不是线程安全的,所以我需要找到一种方法在每个块的并行内使用它。是的。我可以在并行内为每个操作创建数据库上下文,但我想避免在我的方法内创建数据库上下文,因为这会使单元测试更难创建。我怎样才能做到这一点?例如:我可以注册依赖关系,以便每次从数据库中查询项目时它都创建新的数据库连接。像这样的东西: For().Use(() => new MyDbContext());

使用结构图注册依赖:

For<MyDbContext>().Use(() => new MyDbContext()); 
Scan(scanner => { scanner.WithDefaultConventions(); scanner.AssemblyContainingType<ICodeThing>(); }); 

我希望每次查询数据库时 Use(() => new MyDbContext()) 都会创建新的数据库连接,从而消除与此类似的线程安全相关问题:

Parallel.ForEach(params, 
    new ParallelOptions() { MaxDegreeOfParallelism = 5 }, 
    param=> 
    { 
        var data= _database.table.Where(q =>q.field == param.fieldvalue).toList(); 

        /*Fetch data from third party API and do some processing related to param -item. Relatively slow operation so would like to do multiple operations in parallel.*/

        _database.SaveChanges(); 
    });
c# entity-framework thread-safety structuremap
© www.soinside.com 2019 - 2024. All rights reserved.