Parallel.Foreach loop creating multiple db connections throws connection errors?
- by shawn.mek
Login failed. The login is from an untrusted domain and cannot be used with Windows authentication
I wanted to get my code running in parallel, so I changed my foreach loop to a parallel foreach loop. It seemed simple enough. Each loop connects to the database, looks up some stuff, performs some logic, adds some stuff, closes the connection. But I get the above error?
I'm using my local sql server and entity framework (each loop uses it's own context). Is there some problem with connecting multiple times using the same local login or something? How did I get around this?
I have (before trying to covert to a parallel.foreach loop) split my list of objects that I am foreach looping through into four groups (separate csv files) and run four concurrent instances of my program (which ran faster overall than just one, thus the idea for parallel). So it seems connecting to the db shouldn't be a problem?
Any ideas?
EDIT:
Here's before
var gtgGenerator = new CustomGtgGenerator();
var connectionString = ConfigurationManager.ConnectionStrings["BioEntities"].ConnectionString;
var allAccessionsFromObs = _GetAccessionListFromDataFiles(collectionId);
ForEach(cloneIdAndAccessions in allAccessionsFromObs)
DoWork(gtgGenerator, taxonId, organismId, cloneIdAndAccessions, connectionString));
after
var gtgGenerator = new CustomGtgGenerator();
var connectionString = ConfigurationManager.ConnectionStrings["BioEntities"].ConnectionString;
var allAccessionsFromObs = _GetAccessionListFromDataFiles(collectionId);
Parallel.ForEach(allAccessionsFromObs, cloneIdAndAccessions => DoWork(gtgGenerator, taxonId, organismId, cloneIdAndAccessions, connectionString));
Inside the DoWork I use the BioEntities
using (var bioEntities = new BioEntities(connectionString)) {...}