we have designed a multi threaded server that use linq to sql at each of its threads. the test are not look so good… from reviewing our code, a big question has be raised: does linq to sql supports such environments at all?
if yes, we assume that we should create a dedicated DataContext object for each thread? if yes, what is the cost of such approach?
if it will be to complicated, I guess we will dump the linq to sql and roll back to connected approach.. (?)
similar question was raised from the (Per Call)WCF based API side: we use a singleton DataContext object for all WCF function calls? or should we initiate a DataContext for each WCF API call?
Thanks!
ofer
DataContext
Read as: this class is not thread safe and instances should not be shared between threads unless you implement locking.
Be aware that (by default) datacontexts track the record instances that they load – those instances should also not be shared between threads. Those tracked record instances are not refreshed for changes in the database automatically when requeried.
Be aware that calling SubmitChanges on a datacontext sends all modified records that it is tracking back to the database… this could be really bad with multiple users sharing a datacontext even with locking.
Also from the same article:
You should also not share a SqlConnection object between threads without implementing locking.