For example, in a Windows Service, I create the context on the OnStart method and destroy the context on the OnStop method.

In this case, an alternative is to use the GC.KeepAlive(Object obj) method to prevent the garbage collector from collecting the object until after the call to this method. It seems counter intuitive, but it is actually a signal to tell the garbage collector that it can collect the object at any point after this call.