выполнение _db = null НЕ удаляет объект.
Вы должны выполнить _db.Dispose () или использовать блок using.
Сборка мусора удалит объект в недетерминированное время, но как только вы создадите объект, реализующий IDisposable, вы должны ОБЯЗАТЕЛЬНО вызывать Dispose () (если, конечно, вы не передадите его объекту). или другая функция, которая обещает это сделать).
В этом случае легко увидеть, что у фабрики нет способа узнать, когда вы закончили с объектом, поэтому вы должны утилизировать его самостоятельно.