{"record":{"id":"8d55b93e4554cb11","repo":"n8n-io/n8n","slug":"entity-manager-is-not-using-single-database-connec","errorCode":null,"errorMessage":"Entity manager is not using single database connection and cannot be released. Only entity managers created by connection#createEntityManagerWithSingleDatabaseConnection methods have a single database connection and they should be released.","messagePattern":"Entity manager is not using single database connection and cannot be released\\. Only entity managers created by connection#createEntityManagerWithSingleDatabaseConnection methods have a single database connection and they should be released\\.","errorType":"exception","errorClass":"NoNeedToReleaseEntityManagerError","httpStatus":null,"severity":"error","filePath":"packages/@n8n/typeorm/src/entity-manager/EntityManager.ts","lineNumber":1327,"sourceCode":"\t\tif (entityRepositoryInstance instanceof AbstractRepository) {\n\t\t\tif (!(entityRepositoryInstance as any)['manager'])\n\t\t\t\t(entityRepositoryInstance as any)['manager'] = this;\n\t\t} else {\n\t\t\tif (!entityMetadata) throw new CustomRepositoryCannotInheritRepositoryError(customRepository);\n\t\t\t(entityRepositoryInstance as any)['manager'] = this;\n\t\t\t(entityRepositoryInstance as any)['metadata'] = entityMetadata;\n\t\t}\n\n\t\treturn entityRepositoryInstance;\n\t}\n\n\t/**\n\t * Releases all resources used by entity manager.\n\t * This is used when entity manager is created with a single query runner,\n\t * and this single query runner needs to be released after job with entity manager is done.\n\t */\n\tasync release(): Promise<void> {\n\t\tif (!this.queryRunner) throw new NoNeedToReleaseEntityManagerError();\n\n\t\treturn this.queryRunner.release();\n\t}\n}\n","sourceCodeStart":1309,"sourceCodeEnd":1332,"githubUrl":"https://github.com/n8n-io/n8n/blob/5ac6606e81f67bb9534255570cd4e86fd8101eee/packages/@n8n/typeorm/src/entity-manager/EntityManager.ts#L1309-L1332","documentation":"EntityManager.release() is only meaningful for managers created via connection#createEntityManagerWithSingleDatabaseConnection (they own a single query runner). Calling release() on a default manager (which has no queryRunner) throws NoNeedToReleaseEntityManagerError. The guard prevents double-release and accidental release of pooled/shared managers.","triggerScenarios":"Calling `manager.release()` on the default EntityManager obtained from `connection.manager` or `dataSource.manager`; calling release() twice; releasing a manager that was never tied to a single query runner.","commonSituations":"Generic cleanup code that always calls release() in finally; copy-paste from a single-connection example into multi-connection code; helper that wraps any manager and tries to release it.","solutions":["Only call release() on managers you created explicitly via `connection.createQueryRunner().manager` (and pair with queryRunner.release()) or via `createEntityManagerWithSingleDatabaseConnection`.","For the default manager (`connection.manager`), do not call release() — the DataSource owns it.","Remove unconditional release() from finally blocks; gate it behind a flag indicating you created the manager."],"exampleFix":"// before - releasing the shared default manager\nconst manager = dataSource.manager;\ntry { await manager.save(User, u); }\nfinally { await manager.release(); } // -> throws\n\n// after - default manager is owned by the DataSource\nconst manager = dataSource.manager;\nawait manager.save(User, u);\n// no release() — DataSource manages it","handlingStrategy":"validation","validationCode":"function isOwnsQueryRunner(manager: EntityManager): boolean {\n  return !!manager.queryRunner;\n}\n// only release managers you created explicitly\nif (isOwnsQueryRunner(manager)) {\n  await manager.release();\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never call release() on connection.manager / dataSource.manager.","Only release managers from createQueryRunner().manager or createEntityManagerWithSingleDatabaseConnection.","Track ownership with a flag if a helper wraps arbitrary managers.","Remove unconditional release() from finally blocks."],"tags":["typeorm","entity-manager","lifecycle","api-misuse"],"backgroundTag":null,"analyzedSha":"5ac6606e81f67bb9534255570cd4e86fd8101eee","analyzedAt":"2026-08-12T05:26:35.080Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}