1

我试图了解如何使用实体框架检查我的数据库中的任何表是否有数据。我可以检查一张桌子,但如何一次检查所有桌子?我们对 ef6 有什么选择吗?

using (var db = new CreateDbContext())
{
    if(!db.FirstTable.Any())
    {
        // The table is empty
    }
}

任何关于如何遍历实体的指针都会有所帮助。

4

2 回答 2

4

这是您可以使用 t-sql 执行此操作的一种方法。在大多数系统上,这应该是闪电般的速度。这在我们的 ERP 数据库中不到一秒钟就返回了。它在超过 15,000 个分区统计信息中声明了 4210 亿行。

select sum(p.row_count)
from sys.dm_db_partition_stats p
join sys.objects o on o.object_id = p.object_id
where o.type not in ('S', 'IT') --excludes system and internal tables.
于 2018-06-28T20:37:12.373 回答
2

类似于@SeanLange,但显示没有任何行的表的模式名称和表名称。

SELECT  Distinct OBJECT_SCHEMA_NAME(p.object_id) AS [Schema], 
        OBJECT_NAME(p.object_id) AS [Table]
FROM    sys.partitions p
        INNER JOIN sys.indexes i 
            ON p.object_id = i.object_id
            AND p.index_id = i.index_id
WHERE   OBJECT_SCHEMA_NAME(p.object_id) != 'sys'
        And p.Rows = 0    
ORDER BY [Schema], [Table]
于 2018-06-28T20:43:59.330 回答