我想如果.net(asp.net mvc)提供了获取具有DbContext的FileStream大小的可能性 . 到目前为止,我做了研究,我可以:
1) SELECT SUM(DATALENGTH('ColumnName'))FROM Table
2)
SELECT DB_NAME() AS [DBNAME], size / 128 AS [Size in MB]
FROM sys.database_files
WHERE type = 2;
我的问题是我是否可以使用C#计算文件流 . 我通过DbContext连接到db . 我可以得到尺码吗?
请帮我 . BR塞纳留斯
更新10.12.2018
我的帮助是为了获得更高的性能,因为SUM(DATALENGTH(...)很慢 . 考虑到c#我认为我可以帮助加快查询 . 但是,在阅读谷歌上的许多文章后,最好的解决方案是使用任何 sys.database_files.
感谢帮助 .
BR
塞纳留斯
2 回答
尝试使用
Stream
class的Length
属性来获取当前文件的大小(以字节为单位):Please, read a description of FileStream.Length at MSDN:
Update:
如果您使用
EntityFramework
,则使用SqlFunctions
:许多SQL Server内置函数可通过实体框架中的SqlFunctions获得,最高可达6.2和EF Core 2.1中的DbFunctions
在EF 6.2中,SqlFunctions.DataLength可用于返回任何字段的大小 . 例如:
遗憾的是,该功能在EF Core中不可用 . 另一种方法是使用Query Types和raw SQL queries来执行原始SQL查询并将其映射到查询类型:
原始SQL查询可以与LINQ运算符组合以创建最终的SQL语句,从而允许添加
Where()
,GroupBy
和其他运算符 .在2.1之前的EF Core版本中,仍然可以执行原始SQL查询,但它们必须映射到实体类 .