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