Aec*_*Liu 2 c# sql-server entity-framework sql-server-2008r2-express entity-framework-5
我正在开发一个网站,它使用SQL Server 2008 R2 Express作为其数据库.在测试中,有大量数据和图像存储在此数据库中.
据wiki称,SQL Server Express版本的大小限制为10 GB.当我插入数据并达到限制时,将抛出什么异常?或者,如何通过代码检测接近极限问题?
我使用EF 5和代码优先的方法来插入大数据集.
在测试中我看到:
sp_spaceused
Run Code Online (Sandbox Code Playgroud)
将无法按预期工作,在删除大量记录后显示12GB.关于查询sys.databases的其他答案对我来说还不够清楚.
搜索我发现一个非常好的解释关于Ramons博客上的SQL Server 2012 Express Edition 10GB大小限制[EDIT2018更新链接]
SELECT
[name] AS [Filename],
[size]/128.0 AS [Filesize],
CAST(FILEPROPERTY([name],'SpaceUsed') AS int)/128.0 AS [UsedSpaceInMB],
[size]/128.0 - CAST(FILEPROPERTY([name],'SpaceUsed') AS int)/128.0 AS [AvailableSpaceInMB],
[physical_name] AS [Path]
FROM sys.database_files
Run Code Online (Sandbox Code Playgroud)
"... space包含事务日志,它还包括这些文件中所有未使用的空间....当SQL Server Express无法为数据文件保留更多空间时,它将开始抱怨."
所以检查
CAST(FILEPROPERTY([name],'SpaceUsed') AS int)/128.0 AS [UsedSpaceInMB]
Run Code Online (Sandbox Code Playgroud)
似乎是最好的选择.
结合EF我对DB的请求看起来像
string sqlSelect = "SELECT CAST(FILEPROPERTY([name],'SpaceUsed') AS int)/128.0 AS [UsedSpaceInMB] FROM sys.database_files";
var dbResult = dbInstance.Database.SqlQuery<Decimal>(sqlSelect).FirstOrDefault();
double spaceUsedInGb = Convert.ToDouble(dbResult)/1024;
Run Code Online (Sandbox Code Playgroud)