2017-07-11 28 views
0

使用实体框架'DbConetxt我试图检查数据库是否存在下面的查询。EF postgre检查数据库是否存在

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

的问题是,结果总是-1。我使用postgresql,当我在Pgadmin UI查询工具中试用时,查询执行得很好。我曾尝试使用谷歌搜索,但徒劳无功。任何帮助将不胜感激。

注意:上下文没有数据库名称,但具有所有其他数据库连接信息。

+0

你已经检查是否'dbContext.Database.Exists()'工作在你的情况下,开始执行一些或多或少的复杂查询之前? – grek40

+0

Hi @ grek40我可以用** ExecuteSqlCommandAsync **命令创建数据库。但在创建数据库之前,我想检查它是否存在。还像我说的那样,Database.Exists()可能不起作用,因为上下文没有数据库名称。 – Gagan

+0

如何用'SELECT COUNT(*)FROM ...“而不是'ExecuteSqlCommand'使用'SqlQuery '? – grek40

回答

0

请尝试使用此命令。由于数据库名称区分大小写,因此我将其设置为小写。这应返回你真/假

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

感谢您的想法,我试过但它的结果相同。 – Gagan