Probably these are two questions in one, I am using one EF context per request, but I want to use one per thread, because I am going to make some complex task in another thr
It is safe only if you have full control over the thread. It means you must create the thread and thread must die after finishing the job. If you use thread pool to query work you mustn't use context per thread. Thread pool is used for example for threads serving ASP.NET, ASP.NET MVC or WCF requests. Context is not thread safe so do not share it among threads.
To store something per thread use static
variable and mark it with ThreadStaticAttribute
.