2017-07-11 2 views
0

Avec l'Entity Frameworks 'DbConetxt J'essaie de vérifier si la base de données existe avec la requête ci-dessous.EF postgre check si la base de données existe

public async Task<bool> CheckIfExistsAsync(DbContext context) 
{ 
    var result = await context.Database.ExecuteSqlCommandAsync("SELECT 1 from pg_database WHERE datname='CPNewDB'"); 
    return result == 1; 
} 

Le problème est que le résultat est toujours -1. J'utilise postgresql et la requête s'exécute correctement lorsque je l'essaie dans l'outil Pgadmin UI Query. J'ai essayé de googler mais en vain. Toute aide serait appréciée.

Remarque: le contexte n'a pas de nom de base de données, mais toutes les autres informations de connexion à la base de données sont requises.

+0

Avez-vous vérifié si déjà 'dbContext.Database.Exists()' travaille dans votre cas, avant de commencer à exécuter des requêtes plus ou moins compliquées? – grek40

+0

Hi @ grek40 Je suis capable de créer la base de données avec la commande ** ExecuteSqlCommandAsync **. mais avant de créer la base de données je voulais vérifier si elle existe. Aussi comme je l'ai dit, Database.Exists() peut ne pas fonctionner car le contexte n'a pas de nom de base de données. – Gagan

+0

Comment utiliser 'SqlQuery ' avec '" SELECT COUNT (*) FROM ... "' au lieu de 'ExecuteSqlCommand'? – grek40

Répondre

0

Veuillez essayer avec cette commande. Puisque les noms de bases de données sont sensibles à la casse, je les mets en minuscules. Cela devrait vous retourner true/false

select exists(
SELECT datname FROM pg_catalog.pg_database WHERE lower(datname) = lower('dbname') 
); 
+0

merci pour l'idée, j'ai essayé mais c'est le même résultat. – Gagan