EF Core SQLite 检查 table 是否存在
EF Core SQLite checking if table exists
我正在尝试通过使用 EF Core 3.1 RelationalDatabaseFacadeExtensions.ExecuteSqlRaw Method
执行查询来检查 SQLite 数据库中是否存在 table
var sql = $"SELECT COUNT(*) FROM sqlite_master WHERE type = 'table' AND name = '{GetTableName(table)}';";
var result = Database.ExecuteSqlRaw(sql) ;
结果总是returns
result = -1
这是规范化的查询
SELECT COUNT(*)
FROM sqlite_master
WHERE type = 'table' AND name = 'SendRequest';
问题是,为什么 Database.ExecuteSqlRaw(sql)
return -1
的结果?
我在文档中看不到这意味着什么。我觉得它在抛出一个错误,但我还没有找到任何文件来证明或反驳这个想法。
当同一查询在 DB Browser for SQLite 中 运行 时,查询工作得很好:
Database.ExecuteSqlRaw returns UPDATE、INSERT 和 DELETE 查询受影响的行数。对于 SELECT,它总是 returns -1。该方法不用于 returning 实体。
如果您想使用 dbcontexe 获取一些数据,您可以创建带有输出参数的存储过程,该过程将 return 计数。
另一种方法是创建未映射的数据集,它将获取 return 数据并使用 FromSqlRaw 进行 运行 查询。
新建一个class
[NotMapped]
public class SpResult
{
public int TableCount {get; set;}
}
将新的数据库集添加到 dbcontext
public virtual DbSet<SpResult> SpResults{ get; set; }
并查询
var sql = $"SELECT COUNT(*) AS TableCount FROM sqlite_master WHERE type = 'table' AND name = '{GetTableName(table)}';";
var result = await _context.Set<SpResult>()
.FromSqlRaw(sql)
.ToArrayAsync();
var tableCount=result.FirstOrDefault().TableCount;
我正在尝试通过使用 EF Core 3.1 RelationalDatabaseFacadeExtensions.ExecuteSqlRaw Method
执行查询来检查 SQLite 数据库中是否存在 table var sql = $"SELECT COUNT(*) FROM sqlite_master WHERE type = 'table' AND name = '{GetTableName(table)}';";
var result = Database.ExecuteSqlRaw(sql) ;
结果总是returns
result = -1
这是规范化的查询
SELECT COUNT(*)
FROM sqlite_master
WHERE type = 'table' AND name = 'SendRequest';
问题是,为什么 Database.ExecuteSqlRaw(sql)
return -1
的结果?
我在文档中看不到这意味着什么。我觉得它在抛出一个错误,但我还没有找到任何文件来证明或反驳这个想法。
当同一查询在 DB Browser for SQLite 中 运行 时,查询工作得很好:
Database.ExecuteSqlRaw returns UPDATE、INSERT 和 DELETE 查询受影响的行数。对于 SELECT,它总是 returns -1。该方法不用于 returning 实体。
如果您想使用 dbcontexe 获取一些数据,您可以创建带有输出参数的存储过程,该过程将 return 计数。
另一种方法是创建未映射的数据集,它将获取 return 数据并使用 FromSqlRaw 进行 运行 查询。
新建一个class
[NotMapped]
public class SpResult
{
public int TableCount {get; set;}
}
将新的数据库集添加到 dbcontext
public virtual DbSet<SpResult> SpResults{ get; set; }
并查询
var sql = $"SELECT COUNT(*) AS TableCount FROM sqlite_master WHERE type = 'table' AND name = '{GetTableName(table)}';";
var result = await _context.Set<SpResult>()
.FromSqlRaw(sql)
.ToArrayAsync();
var tableCount=result.FirstOrDefault().TableCount;