I think instead of a static variable, the cache should be managed by the dependency injection container of EFCore. Then each of my DbContexts will have a different cache.
The other option would be to use a concurrent dictionary, but I feel like that is not 100% clean.
Furthermore you might still need a concurrent dictionary using the first option, I am not 100% sure how the concurrency guarantees are, if two DbContext instances share the same dependency container.
Hi,
im using this library and just parallelised the test execution of all of my EF Core tests. But while doing this, I hit the following error:
I am using a custom MethodCallConverter called
TriggerMethodCallConverter
, which injectsIDbSchemaRetriever
.Because
IDbSchemaRetriever.GetTableName
caches the table names in astatic
variable, I assume i run into a race condition here:https://github.com/win7user10/Laraue.EfCoreTriggers/blob/e30ecb03d5bb1ec4ea7d0057c331eb1a623c3a5f/src/Laraue.EfCoreTriggers.Common/Services/Impl/EfCoreDbSchemaRetriever.cs#L68-L74
I think instead of a static variable, the cache should be managed by the dependency injection container of EFCore. Then each of my DbContexts will have a different cache.
The other option would be to use a concurrent dictionary, but I feel like that is not 100% clean.
Furthermore you might still need a concurrent dictionary using the first option, I am not 100% sure how the concurrency guarantees are, if two DbContext instances share the same dependency container.